【发布时间】:2013-10-26 05:52:06
【问题描述】:
我正在编写一个 .NET 客户端应用程序,它使用 Java Web 服务并需要对发送的请求进行签名(与 this other question 相关)。
我收到了一个 private.key 文件(和一个 .X509 证书)和一个 Java 源示例。证书看起来像服务的公钥,而 private.key 是我用来签署请求的。
在 Java 源代码中,我可以看到他们将文件转换为字节数组并将其传递给 PKCS8EncodedKeySpec 类的构造函数。
googling suggests这个文件有点是私钥散列(虽然我可能错了)。
有没有办法在 .Net 中使用它或将其转换为 .Net 可以使用的东西?
This link 提到转换公钥/私钥,但我没有两者,或者它是否可以工作。有没有人有更多的信息可以处理?比如这个文件到底是什么?
如果我将它作为字节数组读入并将其转换为字符串,我会得到一个 HEX 负载(例如 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
还有什么建议吗?
【问题讨论】:
标签: java .net wcf wcf-security public-key-encryption