将 PEM 证书链和密钥导入 Java Keystore

将 PEM 证书链和密钥导入 Java Keystore

关于这个主题有很多资源,但我找不到一个涵盖这个稍微特殊的情况的资源。

我有 4 个文件;

  • 私钥.pem
  • 证书.pem
  • 中间_rapidssl.pem
  • ca_geotrust_global.pem

我希望将它们导入到一个新的密钥库中。

有些网站建议使用 DER 格式,然后逐个导入,但由于密钥无法识别,因此失败。

另一个网站建议使用一个特殊的“ImportKey”类来运行导入,这个方法一直有效,直到我发现链断了。也就是说,证书上的链长度为 1,忽略中间和 ca。

有些网站建议使用 PKCS7,但我甚至无法从中获得一个链。其他网站建议使用 PKCS12 格式,但就我的测试而言,它也未能获得整个链。

欢迎任何建议或提示。

答案1

这可能并不完美,但我keytool对您的使用场景做了一些修改。

  1. 将根 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 
    
  2. 导入之前将证书和私钥合并为一个文件。

    cat certificate.pem privatekey.pem > combined.pem
    

    这将导致生成一个类似于以下格式的文件。

    开始证书
    ...
    结束证书
    开始 RSA 私钥
    ...
    结束 RSA 私钥

  3. 将签名的主要证书和密钥导入到现有的 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

相关内容