Есть ли способ изменить формат строки для существующего поля "Код страны" CSR с UTF8 на Printable String?

CentOS 5.x

Краткая версия:

Есть ли способ изменить формат кодирования для существующего поля "Код страны" CSR с UTF8 на Printable String?

Длинная версия:

Я получил CSR, сгенерированный из продукта с использованием стандартных провайдеров безопасности Java (jsse/jce). Некоторая информация в CSR использует строки UTF8 (что, как я понимаю, является предпочтительным требованием кодирования по состоянию на 31 декабря 2003 г. - RF 3280).

Центр сертификации, которому я отправляю CSR, явно требует, чтобы код страны был указан как PrintableString. В моем CSR он указан в виде строки UTF8.

Я вернулся к последнему RFC - http://www.ietf.org/rfc/rfc5280.txt. Похоже, что конфликт конкретно на countryName. Вот где это становится немного грязным...

CountryName является частью относительного DN. Определено, что относительный DN имеет тип DirectoryString, который определяется как выбор teletexString, printableString, universalString, utf8String или bmpString. Он также более конкретно определяет countryName как альфа (верхняя граница 2 байта) или числовая (верхняя граница 3 байта). Кроме того, в приложении это относится к X520countryName, которое ограничено только PrintableString размера 2.

Итак, понятно, почему это не работает. Похоже, что центр сертификации и Sun/Java не согласны с их интерпретацией требований для countryName. Могу ли я что-нибудь сделать, чтобы CSR был совместим с CA?

1 ответ

Решение

Догадаться. Вот основные шаги:

1) Откройте исходный CSR и скопируйте данные base64 между маркерами "——-BEGIN CERTIFICATE REQUEST——-" и "——-END CERTIFICATE REQUEST——-".

2) Поместите эти данные в декодер base64 и сохраните вывод в виде двоичного файла. Существует множество онлайн-сервисов, которые могут сделать это, или, если хотите, есть и локальные инструменты.

3) Скачать / установить шестнадцатеричный редактор. Используйте его, чтобы открыть декодированный двоичный файл.

4) Найдите два значения прямо перед именем страны:

0C
02

5) Измените значение 0C (UTF8String) и измените его на 13 (Printablestring)

6) Сохраните изменения и используйте кодировщик base64 для кодирования его обратно в base64.

7) Добавьте данные base64 обратно между маркерами "——-BEGIN CERTIFICATE REQUEST——-" и "——-END CERTIFICATE REQUEST——-".

Другие вопросы по тегам