2011-07-31 10 views
1

OpenSSL.netを1)CA署名に使用する鍵ペアを作成し、2)このCAを使用して証明書を作成して署名するようにしています。私は、RSA/SHA1 X509CertificateAuthorityを作成し、X509Requestとキーを作成しましたが、実際にリクエストに署名する際に問題が発生しています。OpenSSL.netを使用して証明書に署名する際の問題

'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")) 
私はメッセージ

error:0606B06E:digital envelope routines:EVP_SignFinal:wrong public key type error:0D0C3006:asn1 encoding routines:ASN1_item_sign:EVP lib

任意のアイデアで、上記の行にOpenSslExceptionを取得しています

+0

私はopenSSLをあきらめて、代わりにBouncyCastleを使用しました。はるかに良い文書 – insertjokehere

答えて

1

私は同じエラーがありました。私は手動での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

に便利です実際に問題がありますデフォルトのダイジェストメソッドDSS1が署名に使用されたときにエラーを返すこと。したがって、他の署名方法を指定することで問題は解決します。

関連する問題