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

我有一个私钥,结果是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,但它告诉我没有证书匹配私钥.如果我在没有-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密钥库时,它表示导入时指定的文件为空.

我还设法生成证书签名请求from instructions here,它生成了一个证书文件,但该命令仍然不接受说没有证书匹配私钥

Another answer建议生成公钥,但是当我使用它作为-in arg时,它仍然说没有证书与私钥匹配,我不明白,因为这个公钥是使用此命令从私钥生成的: openssl rsa -in privkey.pem -pubout> key.pub

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

最佳答案 这似乎:

以下命令将其转换为可在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>
点赞