Я не знаю зачем я это делаю. Наверно, как нет оправдания покорению горных вершин. Написал прогу.
Прога умеет сначала с сертификата снимать BASE64 так из PEM получается DER. Потом из DER разбирается структура и в соответствии с описанием создается стркутура данных, или заполняется. получается уже то, с чем можно работать, например проверить дату, можно ли использовать сертификат. Потом можно выделить подпись и номер сертификата, потом запаковать обратно в DER и послать на сервер OCSP для проверки валидности. А началось все с простого. Я решил использовать для проверки сертификатов OpenSSL, а он подвис. А потом не стал выделять русские буквы из сертификата Микрософт, не признавал идентификаторы Микрософт, не признавал идентификаторы российских алгоритмов. А когда я посчитал сколько времени разгребается список отозванных сертификатов из 6тыс штук, ужаснулся и решил написать свою службу, чтобы не тратила время на разбор списков сертификатов, а была к этому готова. Чтобы все списки сертфикатов лежали в хеш таблицах, а сами сертификаты в базе данных LDAP. Такую вот штуку решил соорудить. Научился разгребать сертификаты типа CRL/CER/PEM/DER и подружился с отечественными идентификаторами алгоритмов. С грустью подумал, как попали те организации, которые связали свою жизнь с Микрософтом и Крипто-про.
Прога умеет сначала с сертификата снимать BASE64 так из PEM получается DER. Потом из DER разбирается структура и в соответствии с описанием создается стркутура данных, или заполняется. получается уже то, с чем можно работать, например проверить дату, можно ли использовать сертификат. Потом можно выделить подпись и номер сертификата, потом запаковать обратно в DER и послать на сервер OCSP для проверки валидности. А началось все с простого. Я решил использовать для проверки сертификатов OpenSSL, а он подвис. А потом не стал выделять русские буквы из сертификата Микрософт, не признавал идентификаторы Микрософт, не признавал идентификаторы российских алгоритмов. А когда я посчитал сколько времени разгребается список отозванных сертификатов из 6тыс штук, ужаснулся и решил написать свою службу, чтобы не тратила время на разбор списков сертификатов, а была к этому готова. Чтобы все списки сертфикатов лежали в хеш таблицах, а сами сертификаты в базе данных LDAP. Такую вот штуку решил соорудить. Научился разгребать сертификаты типа CRL/CER/PEM/DER и подружился с отечественными идентификаторами алгоритмов. С грустью подумал, как попали те организации, которые связали свою жизнь с Микрософтом и Крипто-про.
Самое смешное, что я тоже занялся чем-то похожим: прикручиваю ГОСТы к libgcrypt :)
ОтветитьУдалитьP.S. Очень странно, что OpenSSL отказывается работать с КриптоПрошными сертификатами. Вроде бы КриптоКом писали поддержку так, чтобы было совместимо.
ОтветитьУдалитьУ меня вешался OpenSSL в режиме сервера OCSP. И не отображались русские буквы в реквизитах сертификата, потому что винда каждый символ кодировала как два байта.
ОтветитьУдалитьС OCSP не сталкивался. utf-16 без BOM? или utf-8? или как?
ОтветитьУдалитьСкорее или как, сработало применение к каждому двухбайтовому символу g_unichar_to_utf8 (glib). Порядок следования байт от старшего к младшему.
ОтветитьУдалитьБольше всего слов про данный способ кодирования нашел у микрософта который как раз и породил этот способ кодирования в сертификатах: "The ASN.1 BMPString data type, called a UNICODE_STRING in the Certificate Enrollment API, is encoded into a TLV triplet that begins with a Tag byte of 0x1E." Затем нашел упоминание о том что BMPString может быть UCS-2 [RFC 3641]. Потом нашел как может кодироваться UCS-2 в UTF-8 [RFC 3629]. Но на самом деле все было иначе я увидел вместо русских букв \04E\04C\049 и решил что это наверное уникод и дальше просто применил преобразование.
ОтветитьУдалитьПонятно. А OpenSSL, наверное, писали американцы, которые считают, что кроме US-ASCII других сстрок не бывает.
ОтветитьУдалитьне в этом проблемы. В DER есть тип строки UTF8String, в котором как раз очень удобно русские буквы писать, да только микрософт изобрел что-то свое, чтобы не конвертировать свое внутреннее представление
ОтветитьУдалить