У меня есть структура CERT_CONTEXT, которую я извлек из смарт-карты в Windows через CryptoAPI. Мне нужно преобразовать эту структуру в массив закодированных байтов DER, который согласуется с OpenSSL. Самое близкое совпадение, которое я получил до сих пор, - это CryptEncodeObject с использованием X509_ASN_ENCODING и модификатора X509_CERT_TO_BE_SIGNED, который принимает структуру CERT_INFO в качестве входных данных.Преобразование между форматами Windows CryptoAPI и OpenSSL x509
Проблема в том, что она не совпадает с выходом, производимым функцией OpenSSL i2d_X509. Используя сертификат 2048 бит x509 в качестве входных данных, OpenSSL производит 1789 байт кодированного вывода, тогда как Windows CryptoAPI создает 1638 байт кодированного вывода.
Единственный вариант, который я вижу, - это создать сертификат X509 на лету, используя значения из структуры CERT_CONTEXT и закодировать результирующий объект непосредственно с помощью функции i2d_X509. Единственная проблема заключается в том, что я не могу извлечь закрытый ключ из смарт-карты, так что это может вызвать проблемы с процедурами создания сертификатов x509.
Если кто-либо может предоставить какие-либо идеи/советы/советы по этим вопросам, я был бы очень обязан.
Argh !, прямо передо мной все время :), спасибо, я бы никогда не нашел это в противном случае, я решил, что использую функцию CryptEncodeObject. Мне не нужен секретный ключ, я использую кодировку открытого ключа в качестве исходных данных для операции подписи. –