18.04.2007 0:31:19Импор открытого ключа из сертификата без установки Ответов: 7
Сергей
Существует ли более-менее _легальный-документированный_ способ импортирования открытого ключа из X.509-сертификата (.cer) без установки сертификата в хранилище?
Т.е. только имея файл сертификата получить открытый ключ.

Насколько по вашему мнению такое было бы уместно при проверке цифровой подписи получаемых сообщений? Например, получателю приходит документ + detached подпись + сертификат отправителя.
 
Ответы:
18.04.2007 10:59:12Василий
Конечно, можно.
Собственно, читаете файл в буфер, получайте контекст сертификата при указании этого буфера - CertCreateCertificateContext (X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, bCert, dwCertLen), а потом открытый ключ - CryptImportPublicKeyInfo.
18.04.2007 11:22:56Сергей
Спасибо, Василий. Теперь понятно.
18.04.2007 14:31:03Сергей
На практике оказалось хуже.
Загружаю сертификат в буфер, вызываю CertCreateCertificateContext((X509_ASN_ENCODING | PKCS_7_ASN_ENCODING), ptrBuffer, nBufferSize). Функция стабильно возвращает ошибку 8009310B:
CRYPT_E_ASN1_BADTAG - ASN1 bad tag value met

.cer-сертификат, имеет структуру
-----BEGIN CERTIFICATE-----
MIIC/jCCAqugAwIBAgIKYdrxIgACAAAAlDAKBgYqhQMCAgMFADBiMRswGQYJKoZI
. . .
stY=
-----END CERTIFICATE-----
Что может быть не так?
18.04.2007 14:42:13Сергей
Поторопился.
Убрал из файла
-- BEGIN... --
-- END ... ---
и переводы строк ("чистый" base64) - контекст получается.

Нет ли Cert/Crypt - функций которые позволяли производить такую "очистку" .cer-файла?

18.04.2007 15:19:00Kirill Sobolev
CryptStringToBinary
18.04.2007 16:43:34Сергей
Спасибо! Получилось)))
18.04.2007 16:57:46Сергей
Спасибо! Получилось)))