gpt4 book ai didi

java - 如何将 Java 私钥文件转换为 .net x509Certificate2

转载 作者:行者123 更新时间:2023-11-30 04:11:49 25 4
gpt4 key购买 nike

我正在编写一个使用 Java Web 服务的 .NET 客户端应用程序,并且需要对发送的请求进行签名(与 this other question 相关)。

我已获得一个 private.key 文件(和一个 .X509 证书)和一个 Java 源示例。该证书看起来像是服务的公钥,而 private.key 是我用来签署请求的。

在 Java 源代码中,我可以看到他们将文件转换为字节数组并将其传递到 PKCS8EncodedKeySpec 类的构造函数中。

一点googling suggests这个文件是一个私钥哈希(尽管我可能是错的)。

有什么方法可以在.Net中使用它或将其转换为.Net可以使用的东西吗?

This link提到转换公钥/私钥,但我两者都没有,或者它是否有效。有人有更多信息可以处理吗?比如这个文件到底是什么?

如果我将其作为字节数组读取并将其转换为字符串,我会得到大量十六进制(例如 AA-BB-06 等),但无论我使用什么编码,我都无法将其转换为任何有用的东西.

This documentation表明它符合 PKCS #8 标准。

我尝试了(由@gtrig建议)命令:

openssl rsa -in pkcs8privatekey.der -inform der -out privatekey.pem

但这给了我以下内容:

unable to load Private Key
32096:error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag:tasn_dec.c:1306:
32096:error:0D06C03A:asn1 encoding routines:ASN1_D2I_EX_PRIMITIVE:nested asn1 error:tasn_dec.c:830:
32096:error:0D08303A:asn1 encoding routines:ASN1_TEMPLATE_NOEXP_D2I:nested asn1 error:tasn_dec.c:749:Field=n, Type=RSA
32096:error:0D09A00D:asn1 encoding routines:d2i_PrivateKey:ASN1 lib:d2i_pr.c:99:

我在使用 NET 和 PEM -inform args 时也遇到类似的错误。

和:

openssl asn1parse -in private.key

给我错误:

"Error: offset too large"

我刚刚发现如果我将其转换为 Base 64 字符串

  Dim ba As Byte() = IO.File.ReadAllBytes("C:\private.key")
Dim toString1 As String = System.Convert.ToBase64String(ba)

这给了我一个以MIICdgIBADANB开头并且长度为924个字符的字符串。

尝试以下命令给我

openssl rsa -in private.key -text -noout

unable to load Private Key
17978:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:647:Expec ting: ANY PRIVATE KEY

还有什么建议吗?

最佳答案

这可能不是私钥的“哈希”。它很可能是 PKCS#8 格式的私钥。

您可以使用openssl命令行工具来创建 PKCS#12 keystore ,然后该 keystore 应该能够用于构造 X509Certificate2对象。

首先,您可能需要将私钥从 DER 转换为 PEM 格式,这也可以在 openssl 中完成:

openssl rsa -in pkcs8privatekey.der -inform der -out privatekey.pem

然后使用以下命令创建 PKCS#12 keystore :

openssl pkcs12 -export -name myalias -in mycert.crt -inkey privatekey.pem -out keystore.p12

最后,您应该能够将其导入到 X509Certificate2 对象中:

X509Certificate2 cert = X509Certificate2("C:\Path\keystore.p12", "password");

关于java - 如何将 Java 私钥文件转换为 .net x509Certificate2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19431827/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com