| ||||
| ||||
Существует ли более-менее _легальный-документированный_ способ импортирования открытого ключа из X.509-сертификата (.cer) без установки сертификата в хранилище? Т.е. только имея файл сертификата получить открытый ключ. Насколько по вашему мнению такое было бы уместно при проверке цифровой подписи получаемых сообщений? Например, получателю приходит документ + detached подпись + сертификат отправителя. | ||||
Ответы: | ||||
| ||||
Конечно, можно. Собственно, читаете файл в буфер, получайте контекст сертификата при указании этого буфера - CertCreateCertificateContext (X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, bCert, dwCertLen), а потом открытый ключ - CryptImportPublicKeyInfo. | ||||
| ||||
Спасибо, Василий. Теперь понятно. | ||||
| ||||
На практике оказалось хуже. Загружаю сертификат в буфер, вызываю 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----- Что может быть не так? | ||||
| ||||
Поторопился. Убрал из файла -- BEGIN... -- -- END ... --- и переводы строк ("чистый" base64) - контекст получается. Нет ли Cert/Crypt - функций которые позволяли производить такую "очистку" .cer-файла? | ||||
| ||||
CryptStringToBinary | ||||
| ||||
Спасибо! Получилось))) | ||||
| ||||
Спасибо! Получилось))) | ||||