Java 的 keytool 是否能够导出带有私钥的 X.509 证书?
我正在考虑用户生成证书(其中包含私钥)并将其提供给签名工具的场景。签名工具使用证书中的私钥对目标文件进行签名。最终,从证书中删除私钥并将证书附加到目标文件以进行分发。
我还不能发表评论,所以我将使用这种形式:通常使用 PKCS #12 http://en.wikipedia.org/wiki/PKCS#12来存储带有私钥的证书。此外,可以将公钥/私钥对存储在 PCKS #8 容器中并单独发送证书。
如果您有兴趣,我想我有一些用于 PKCS #12 存储的 java 代码示例。
此外,开源 Java 证书颁发机构 EJBCA (http://www.ejbca.org/) 是一个很好的示例来源。
生成的私钥绝不会出于任何目的被他人使用或共享。我知道的签名工具会使用他们自己的私钥来生成他们的签名来证明你的公钥。例如,您使用 keytool 生成密钥对并将 CSR 提交给 CA。CA 将使用他们自己的 pvt 密钥在您的证书上加盖他们的签名。
密钥及其签名证书通常存储在密钥库容器中,例如 PKCS12 或 Java 的 JKS。还可以将证书和密钥提取到 PEM 格式文件中,以便在 Apache HTTPD 等应用程序中使用。
要从 JKS 文件中提取证书和密钥,需要在使用 openssl 提取证书之前将其转换为 PKCS12 格式文件:
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
keytool(命令行可执行文件)没有导出私钥的选项。但是您可以使用 JSA-API 以编程方式执行此操作(虽然没有尝试过)。