如何将pem私钥转换为可在.NET中使用的窗口格式

时间:2013-10-31 10:57:59

标签: .net openssl x509certificate

我有一个私钥,结果是pkcs8格式,我设法使用以下命令变成一个pem文件:

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

我现在需要将其转换为pkcs12,以便我可以在.NET中使用它来创建X509证书(我也想将其导入到Windows证书管理器中)。

我试过这个命令:

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

但是,我没有公钥,我尝试使用pkey.pem文件作为-in arg,但它告诉我No certificate matches private key。如果我在没有-in arg的情况下尝试,那么没有任何反应(我的意思是什么,在我按ctrl-c之前有一个空行。)

如何从私钥生成公钥,或在没有公钥的情况下转换为pkcs12?

这个问题的第一部分是from the answer here

found an answer给了我一些希望,就是说要运行这个命令(-nocerts):

openssl pkcs12 -export -nocerts -inkey your.private.key.pem -out your.private.key.p12

但是当我尝试将文件导入到Windows密钥库时,它会在导入时显示The specified file is empty

我还设法生成证书签名请求from instructions here,该请求生成了证书文件,但该命令仍然不接受No certificate matches private key

Another answer建议生成公钥,但是当我将其用作-in arg时,它仍然显示No certificate matches private key,我不明白这一点公钥是使用以下命令从私钥生成的:openssl rsa -in privkey.pem -pubout > key.pub

编辑: 我在下面发布了一个答案,但如上所述,我无法验证此信息或告知其是否有效。如果有人有任何进一步的信息,请告诉我。

1 个答案:

答案 0 :(得分:2)

看起来似乎是:

以下命令将其转换为可在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密钥库,然后可以从.NET访问并将其附加到我的WCF请求。

不幸的是,我无法验证这是否可以作为服务响应使用与我的请求相同的数据,这完全令人困惑:

请求:

POST http://[HOST].com/services/fsa/1.0 HTTP/1.1
Content-Type: text/xml; charset=utf-8
VsDebuggerCausalityData: uIDPo0ii5Jr5wONMi6i/jkMQdFkAAAAArRV2zOsUrEioQMkqYDWulG6ktjqzCoRLtP+/9VQSARUACQAA
SOAPAction: ""
Host: [HOST]
Content-Length: 299
Expect: 100-continue
Connection: Keep-Alive

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><list xmlns="http://[HOST].com/services/fsa/1.0"><String_1 xmlns="">[MY_STRING]</String_1></list></s:Body></s:Envelope>

响应:

HTTP/1.1 200 OK
Date: Thu, 31 Oct 2013 12:19:38 GMT
Server: Apache/2.2.17 (Unix) mod_ssl/2.2.17 OpenSSL/1.0.0a mod_jk/1.2.31
X-Powered-By: Servlet 2.5; JBoss-5.0/JBossWeb-2.1
VsDebuggerCausalityData: uIDPo0ii5Jr5wONMi6i/jkMQdFkAAAAArRV2zOsUrEioQMkqYDWulG6ktjqzCoRLtP+/9VQSARUACQAA
SOAPAction: ""
host: [HOST]
Expect: 100-continue
connection: Keep-Alive, Keep-Alive
Content-Length: 299
Keep-Alive: timeout=2, max=100
Content-Type: text/xml;charset=utf-8

<s:Envelope xmlns:s='http://schemas.xmlsoap.org/soap/envelope/'><s:Body xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'><list xmlns='http://[HOST].com/services/fsa/1.0'><String_1 xmlns=''>[MY_STRING]</String_1></list></s:Body></s:Envelope>