Назад | Перейти на главную страницу

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

CentOS 5.x

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

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

Полная версия:

У меня есть 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) Откройте исходный CSR и скопируйте данные base64 между маркерами «——- НАЧАТЬ ЗАПРОС СЕРТИФИКАТА ——-» и «——- КОНЕЦ ЗАПРОСА СЕРТИФИКАТА ——-».

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

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

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

0C
02

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

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

7) Добавьте данные base64 обратно между маркерами «——- НАЧАТЬ ЗАПРОС СЕРТИФИКАТА ——-» и «——- КОНЕЦ ЗАПРОСА СЕРТИФИКАТА ——-».