Java的keytool是否能够导出带有私钥的X.509证书?
我正在考虑用户生成证书(其中包含私钥)并将其提供给签名工具的场景。签名工具使用证书中的私钥来签署目标文件。最终,将从证书中删除私钥,并将证书附加到目标文件以进行分发。
答案 0 :(得分:2)
我还不能发表评论,所以我会用这个表格: 通常使用PKCS#12 http://en.wikipedia.org/wiki/PKCS#12来存储带有私钥的证书。此外,可以将公钥/私钥对存储在PCKS#8容器中并单独发送证书。
如果您有兴趣,我想我有一些用于PKCS#12存储的Java代码示例。
此外,开源Java证书颁发机构EJBCA(http://www.ejbca.org/)是一个很好的示例来源。
答案 1 :(得分:1)
生成的私钥从不出于任何目的而被其他人使用或共享。 我知道的签名工具会使用自己的私钥生成签名来验证您的公钥。对于例如使用keytool生成密钥对并将CSR提交给CA. CA会使用自己的pvt密钥在证书上盖章。
答案 2 :(得分:1)
keytool (命令行可执行文件)没有导出私钥的选项。但您可以使用JSA-API以编程方式执行此操作(但尚未尝试过)。
答案 3 :(得分:1)
密钥及其签名证书通常存储在密钥库容器中,例如PKCS12或Java的JKS。还可以将证书和密钥提取到PEM格式文件中,以便在Apache HTTPD等应用程序中使用。
要从JKS文件中提取证书和密钥,必须先将其转换为PKCS12格式文件,然后再使用openssl提取证书:
keytool -importkeystore -srckeystore keystore.jks -destkeystore keystore.pkcs12 -deststoretype pkcs12
openssl pkcs12 -in keystore.pkcs12 -out mycert.crt -nokeys
openssl pkcs12 -in keystore.pkcs12 -out mykey.key -nocerts