关于这个主题有很多资源,但我找不到一个涵盖这个稍微特殊的情况的资源。
我有 4 个文件;
- 私钥.pem
- 证书.pem
- 中间_rapidssl.pem
- ca_geotrust_global.pem
我希望将它们导入到一个新的密钥库中。
有些网站建议使用 DER 格式,然后逐个导入,但由于密钥无法识别,因此失败。
另一个网站建议使用一个特殊的“ImportKey”类来运行导入,这个方法一直有效,直到我发现链断了。也就是说,证书上的链长度为 1,忽略中间和 ca。
有些网站建议使用 PKCS7,但我甚至无法从中获得一个链。其他网站建议使用 PKCS12 格式,但就我的测试而言,它也未能获得整个链。
欢迎任何建议或提示。
答案1
这可能并不完美,但我keytool
对您的使用场景做了一些修改。
将根 CA 证书或中间 CA 证书导入现有 Java 密钥库:
keytool -import -trustcacerts -alias root -file ca_geotrust_global.pem -keystore yourkeystore.jks keytool -import -trustcacerts -alias root -file intermediate_rapidssl.pem -keystore yourkeystore.jks
导入之前将证书和私钥合并为一个文件。
cat certificate.pem privatekey.pem > combined.pem
这将导致生成一个类似于以下格式的文件。
开始证书
...
结束证书
开始 RSA 私钥
...
结束 RSA 私钥将签名的主要证书和密钥导入到现有的 Java 密钥库:
keytool -import -trustcacerts -alias yourdomain -file combined.pem -keystore yourkeystore.jks
答案2
将所有 *.pem 文件连接成一个 pem 文件,如 all.pem 然后使用私钥 + all.pem 创建 p12 格式的密钥库
openssl pkcs12 -export -inkey private.key -in all.pem -name test -out test.p12
然后将p12导出到jks
keytool -importkeystore -srckeystore test.p12 -srcstoretype pkcs12 -destkeystore test.jks
答案3
keytool 不提供从单个(组合)文件导入证书 + 私钥的方法,如上所述。它运行良好,但只导入了证书,而忽略了私钥。您可以通过以下方式检查keytool -list -v -keystore yourkeystore.jks
- yourdomain 条目类型是 TrustedCertEntry,而不是 PrivateKeyEntry。
因此,为了解决最初的问题,应该首先使用 openssl(或类似工具)创建一个 PKCS#12 密钥库,然后使用 导入该密钥库keytool -importkeystore
。