Экспорт ЭЦП в формате PKCS#12
Недавно понадобилось осуществить экспорт сертификата с закрытым ключом с ключевого носителя etoken в формате PKCS#12. Оказалось, что это не так просто, как может показаться на первый взгляд. При экспорте с помощью стандартных средств просмотра сертификата с использованием КриптоПро 3.6 результат не распознается OpenSSL. Гугл подсказал решение с помощью утилиты P12FromGostCSP. Цитата с сайта разработчиков:
Контейнер PKCS#12, создаваемый утилитой P12FromGostCSP полностью совместим с аналогичными контейнерами, создаваемыми ООО «КриптоКом» (в рамках проекта openssl) и ООО «Топ Кросс», чего, к сожалению, не скажешь о контейнере, создаваемом программными средствами, входящими в состав КриптоПро CSP (начиная с версии R3).
Просмотреть ASN1-структуры контейнера PKCS#12, созданного средствами КриптоПро CSP R3, и контейнеров, созданных другими средствами, удобно утилитами openssl или lirssl следующего вида:
#openssl asn1parse –inform DER –in <контейнер PKCS#12>
Если вы сравните эти структуры, то вам сразу бросится в глаза, что, например, вместо алгоритма хэширования ГОСТ Р 34.11-94 в контейнере от КриптоПро используется SHA1. Еще более интересный результат вы получите, если попробуете посмотреть содержимое контейнера, выполнив следующую команду:
#openssl pkcs12 –in <контейнер PKCS#12>
В итоге результат работы утилиты должен содержать сертификат и закрытый ключ. Проверить это можно командой:
openssl.exe pkcs12 -in C:/key.pfx -nodes
Для преобразования контейнера в формат pem можно воспользоваться командой:
openssl.exe pkcs12 -in C:/key.pfx -out C:/key.pem -nodes -clcerts