1

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

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

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

一些谷歌搜索表明这个文件是一个私钥哈希(虽然我可能错了)。

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

此链接提到转换公钥/私钥,但我没有两者,或者它是否可以工作。有没有人有更多的信息可以处理?比如这个文件到底是什么?

如果我将它作为字节数组读入并将其转换为字符串,我会得到一个 HEX 负载(例如 AA-BB-06 等),但无论我使用何种编码,我都无法将它转换为任何有用的东西。

该文档表明它符合 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)

这给了我一个以MIICdgIBADANB924 个字符开头的字符串。

尝试以下命令给了我

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

有什么进一步的建议吗?

4

3 回答 3

2

它可能不是私钥的“散列”。它很可能是 PKCS#8 格式的私钥。

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

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

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

然后使用以下命令创建 PKCS#12 密钥库:

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

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

X509Certificate2 cert = X509Certificate2("C:\Path\keystore.p12", "password");
于 2013-10-18T07:21:40.563 回答
0

您可以使用关键工具 UI。您需要知道他们给您的证书类型,通常是 PEM 的 JKS 密钥。

于 2013-10-27T16:49:04.180 回答
0

以下命令将其转换为可在 Windows 中使用的格式:

将私钥从 pkcs8/DER 转换为 PEM 文件格式

openssl pkcs8 -nocrypt -in dealerPrivate.key -inform der -outform pem -out private.pem

将证书从 x509/DER 转换为 PEM 文件格式

openssl x509 -inform der -in dealerCertificate.x509 -out public.pem

将这两个文件合并为一个 pkcs12 文件——系统将提示您输入密码以保护 p12

openssl pkcs12 -export -inkey private.pem -in public.pem -out mycert.p12

pkcs12可以直接在windows中使用。

于 2013-12-09T10:10:38.763 回答