【问题标题】:Trying to create a Private Key and Certificate Request with Bouncycastle .net尝试使用 Bouncycastle .net 创建私钥和证书请求
【发布时间】:2014-05-17 19:52:25
【问题描述】:

我正在尝试为我公司的人员创建一个工具,以轻松创建我可以使用我们的内部 CA 签署的私钥和证书请求。创建证书请求并对其进行签名效果很好(在 CentOS 服务器上使用 easy-rsa 和 Openssl)。但是在测试创建的密钥时,OpenSSL 无法加载密钥...

我正在使用带有 VB.Net 的 BouncyCastle 和这段代码:

Private Sub cmdGenerate_Click(sender As Object, e As EventArgs) Handles cmdGenerate.Click
    Dim c = Me.Cursor
    Me.Cursor = Cursors.WaitCursor
    Dim rsa As New Crypto.Generators.RsaKeyPairGenerator()
    rsa.Init(New Crypto.KeyGenerationParameters(New Security.SecureRandom, 2048))
    Dim keyPair = rsa.GenerateKeyPair
    Dim Name As String = "Richard"
    Dim Folder As String = "C:"
    Dim filename_csr = Folder & "\" & Name & ".csr"
    Dim filename_key = Folder & "\" & Name & ".key"

    'CSR Request
    Dim x509Navn As New Asn1.X509.X509Name("CN=" & txtNavn.Text)
    Dim csr = New Pkcs.Pkcs10CertificationRequest("SHA1WITHRSA", x509Navn, keyPair.Public, Nothing, keyPair.Private)

    Dim IO As New FileStream(filename_csr, FileMode.Create, FileAccess.Write)
    Dim pemWr As New PemWriter(New StreamWriter(IO))
    Dim pemObj As New Utilities.IO.Pem.PemObject("CERTIFICATE REQUEST", csr.GetEncoded())
    pemWr.WriteObject(pemObj)
    pemWr.Writer.Close()

    'Private key
    IO = New FileStream(filename_key, FileMode.Create, FileAccess.Write)
    pemWr = New PemWriter(New StreamWriter(IO))
    Dim priv As Parameters.RsaPrivateCrtKeyParameters = keyPair.Private
    Dim pStruct As RsaPublicKeyStructure = New RsaPublicKeyStructure(priv.Modulus, priv.Exponent)
    pStruct.ToAsn1Object().GetDerEncoded()
    pemObj = New Utilities.IO.Pem.PemObject("PRIVATE KEY", pStruct.ToAsn1Object().GetDerEncoded())
    pemWr.WriteObject(pemObj)
    pemWr.Writer.Close()

    'Show the files
    Process.Start("explorer.exe", "/select," & filename_csr)

    Me.Cursor = c
End Sub

通过这些导入:

Imports Org.BouncyCastle
Imports Org.BouncyCastle.Pkcs
Imports Org.BouncyCastle.Asn1.Pkcs
Imports Org.BouncyCastle.Asn1.X509
Imports Org.BouncyCastle.X509
Imports Org.BouncyCastle.Crypto
Imports Org.BouncyCastle.Security
Imports Org.BouncyCastle.OpenSsl
Imports System.Text
Imports System.IO

我注意到,与使用 easy-rsa/openssl 创建的密钥相比,私钥似乎很小 这是一个示例私钥/csr

-----BEGIN CERTIFICATE REQUEST-----
MIICWzCCAUMCAQAwGDEWMBQGA1UEAwwNU3RhY2tPdmVyZmxvdzCCASIwDQYJKoZI
hvcNAQEBBQADggEPADCCAQoCggEBAIcgrpqVckegSCm+V6qY1O4sfdmPEn5MXgxe
nenBIH7pkBTB5EMOZtEC9p5XdSoCVU2F4g64mn43jcHzP+nucqFLICy9hn+CABvT
n5+wj2anHt0RZaxpuDtrFVzXQyXJ2UcxV8xzMHrqOUtwoMAvNS001K0PRra1e8Nu
5lQV2mj9/VfnY6wCsKj8iRDpK0m+R5Wv7IO0TVzPcwHWNFiWl21AV9ForRIHSiSQ
rRSZjCIkIchKsjmXgD3y869bAOG7M66Oix+CDN1Zd0sH7bUqzUbrpTP0wtmGZlJV
ir2YLqTy6gAIJtu7BfLfmnEEd3n9/YH/WGGBEaHGZj584aEADaUCAwEAATANBgkq
hkiG9w0BAQUFAAOCAQEAJS0k1pCC7gd2hBcswhidoSBldY8JWpYcC8rZeyAjX7mc
fVuPbVBXBabtsUyhbol8eyo5RNJAdzcBNAXEZIyVYePy1UAAJqOjyBFlCk7sL7Gr
dXEiJa/hS7+AS8YvwnFKDw1wQ+CEQLFyLed5OgnFYqmzARwcR15rf2CVsoEjhNJW
h0siG4Un2mfLqePgayLErtOH7RsdD+skUaPbcscrTsHOqqo1OUdURL+iR6kTUC7B
pQSchDysYijgMHsv9dtwzBUnqYmOLUSnXQmafDzQ0wylvqY9gzgJhMZFj9rDPU4Z
druRu/cc/nkKZdweHBMZtzFdr3PmHpJOCL4iF0Tpmg==
-----END CERTIFICATE REQUEST-----

还有私钥:

-----BEGIN PRIVATE KEY-----
MIICCQKCAQEAhyCumpVyR6BIKb5XqpjU7ix92Y8SfkxeDF6d6cEgfumQFMHkQw5m
0QL2nld1KgJVTYXiDriafjeNwfM/6e5yoUsgLL2Gf4IAG9Ofn7CPZqce3RFlrGm4
O2sVXNdDJcnZRzFXzHMweuo5S3CgwC81LTTUrQ9GtrV7w27mVBXaaP39V+djrAKw
qPyJEOkrSb5Hla/sg7RNXM9zAdY0WJaXbUBX0WitEgdKJJCtFJmMIiQhyEqyOZeA
PfLzr1sA4bszro6LH4IM3Vl3SwfttSrNRuulM/TC2YZmUlWKvZgupPLqAAgm27sF
8t+acQR3ef39gf9YYYERocZmPnzhoQANpQKCAQBeXFcxgaz1EZty8wV7DxCaZZ1Y
gI10ftWqI6R4aLHNjkJcDG3e2b64tC4NspsRw+FXqmeKyiSwgRDP4JLARA/uTGzi
cVLr1ZdH10b/l6b8EzX9QDnU5VqOu5+GXpf4WnUNPwrFraasHsX1xWer7QtgTyU4
2JMT4bXUaqwTCdOkPryFzT2mhF3SSJiYw5n0K03fmX1eQf587r0TAPgtPIM/Nd6f
MCPzoqWlc2ey4zZny631D9/hUpSZqC3vkPXe+8nQgVnwB+LG/UGARp3k1X6WNzHp
puU1ARRxScce9THCx0JNndsvFIWF+px7+vfwytdHTgbdyiF3vJTwRES2lzaB
-----END PRIVATE KEY-----

OpenSSL 在尝试解密文件时返回的错误消息如下:

# openssl smime -decrypt -binary -in test.txt.enc -out test.txt -aes256 -recip stackoverflow.crt -inkey stackoverflow.key
unable to load signing key file
139728669665096:error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag:tasn_dec.c:1319:
139728669665096:error:0D07803A:asn1 encoding routines:ASN1_ITEM_EX_D2I:nested asn1 error:tasn_dec.c:381:Type=X509_ALGOR
139728669665096:error:0D08303A:asn1 encoding routines:ASN1_TEMPLATE_NOEXP_D2I:nested asn1 error:tasn_dec.c:751:Field=pkeyalg, Type=PKCS8_PRIV_KEY_INFO
139728669665096:error:0907B00D:PEM routines:PEM_READ_BIO_PRIVATEKEY:ASN1 lib:pem_pkey.c:132:

加密文件时的命令:

# openssl smime -encrypt -binary -in test.txt -out test.txt.enc -aes256 stackoverflow.crt

最好的问候, 理查德·哈根

【问题讨论】:

  • 你的私钥是一个非常简单的格式,它是两个整数的序列,模数和私有指数。 OpenSSL 不接受这种格式。
  • 感谢您的评论。知道如何解决吗?
  • 嗯,读这篇文章有点解释:barelyenough.org/blog/2008/04/fun-with-public-keys 我会看看 BouncyCastle 中的 openssl.pkcs8generator...

标签: .net vb.net encryption openssl bouncycastle


【解决方案1】:

我用 Pkcs8Generator.Generate() 解决了这个问题,而不是创建我自己的 PemObject,就像一个魅力! :D

    'Private key
    Dim pkcs8 As New OpenSsl.Pkcs8Generator(keyPair.Private)
    IO = New FileStream(filename_key, FileMode.Create, FileAccess.Write)
    pemWr = New PemWriter(New StreamWriter(IO))
    pemWr.WriteObject(pkcs8.Generate())
    pemWr.Writer.Close()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-21
    • 1970-01-01
    • 2019-12-22
    • 2017-06-17
    • 1970-01-01
    • 1970-01-01
    • 2015-01-16
    • 2012-09-06
    相关资源
    最近更新 更多