Проблема с использованием OpenSSL.net для подписи сертификата - PullRequest
1 голос
/ 31 июля 2011

Я пытаюсь заставить OpenSSL.net 1) создать пару ключей для подписи CA и 2) создать и подписать сертификаты, используя этот CA.Мне удалось создать RSA / SHA1 X509CertificateAuthority, и я создал X509Request и ключи, но у меня действительно проблемы с подписанием запроса.

   'create the request and request key
    Dim rsa As OpenSSL.Crypto.RSA = New OpenSSL.Crypto.RSA()
    rsa.GenerateKeys(1024, 65569, Nothing, Nothing)
    Dim req_key As OpenSSL.Crypto.CryptoKey = New OpenSSL.Crypto.CryptoKey(rsa)
    Dim req_key_b As OpenSSL.Core.BIO = OpenSSL.Core.BIO.MemoryBuffer
    req_key_b.Write(req_key.GetRSA.PrivateKeyAsPEM)
    WriteBio(req_key_b, IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "req.key"))

    'make the request
    Dim req As OpenSSL.X509.X509Request = New OpenSSL.X509.X509Request(3, "CN=newcert", req_key)

    Dim req_cert As OpenSSL.X509.X509Certificate = ca.ProcessRequest(req, Now, Now.AddDays(365))
    '** ^^^ Exception on this line ^^^ ***
    Dim req_cert_b As OpenSSL.Core.BIO = OpenSSL.Core.BIO.MemoryBuffer
    req_cert.Write(req_cert_b)
    WriteBio(req_cert_b, IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "req.crt"))

Я получаю исключение OpenSslException в строке, указанной выше,с сообщением

ошибка: 0606B06E: процедуры цифрового конверта: EVP_SignFinal: ошибка неправильного типа открытого ключа: 0D0C3006: процедуры кодирования asn1: ASN1_item_sign: EVP lib

Есть идеи?

Ответы [ 2 ]

1 голос
/ 14 декабря 2011

У меня была такая же ошибка. После некоторых исследований, похоже, работает, когда я вручную указываю MessageDigest, например:

var certificate = ca.ProcessRequest(req, Now, Now.AddDays(365), MessageDigest.SHA1)

Вы также можете указать дайджест сообщения по умолчанию в вашем openssl.conf: default_md. Но вы, вероятно, инициализировали CA без конфига, как и я:)

var ca = new X509CertificateAuthority(pkcs12.Certificate, pkcs12.PrivateKey, new SimpleSerialNumber(42), null);

Я знаю, что вы сдались и использовали BouncyCastle, но, надеюсь, это пригодится кому-то еще:)

0 голосов
/ 02 августа 2013

На самом деле проблема в том, что метод дайджеста по умолчанию DSS1 выдает ошибку при использовании для подписи. Таким образом, указание другого метода подписания решит проблему.

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