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