Преобразование между форматами Windows CryptoAPI и OpenSSL x509 - PullRequest
4 голосов
/ 01 февраля 2011

У меня есть структура CERT_CONTEXT , которую я извлек из смарт-карты в Windows через CryptoAPI. Мне нужно преобразовать эту структуру в байтовый массив DER, который согласуется с OpenSSL. Самое близкое совпадение, которое я получил, это CryptEncodeObject с использованием X509_ASN_ENCODING и модификатора X509_CERT_TO_BE_SIGNED, который принимает структуру CERT_INFO в качестве ввода.

Проблема в том, что он не совпадает с выводом, полученным функцией OpenSSL i2d_X509 . Используя 2048-битный сертификат x509 в качестве входных данных, OpenSSL создает 1789 байтов кодированного вывода, в то время как Windows CryptoAPI создает 1638 байтов кодированного вывода.

Единственный оставленный вариант, который я вижу, - это создание сертификата X509 на лету с использованием значений из структуры CERT_CONTEXT и кодирование полученного объекта напрямую с помощью функции i2d_X509, Единственная проблема заключается в том, что я не могу извлечь секретный ключ из смарт-карты, поэтому это может вызвать проблемы с процедурами создания сертификата x509.

Если кто-нибудь может дать какие-либо идеи / советы / советы по этим вопросам, я был бы очень признателен.

1 Ответ

6 голосов
/ 01 февраля 2011

DER-кодированный сертификат можно получить из буфера (ctx-> pbCertEncoded, ctx-> cbCertEncoded), где ctx является объектом PCCERT_CONTEXT. Тем не менее вы не сможете восстановить закрытый ключ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...