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

关于这个话题有很多资源,但是我没有发现哪个涵盖了这个稍微特殊的情况。

我有4个文件;

  • privatekey.pem
  • certificate.pem
  • intermediate_rapidssl.pem
  • ca_geotrust_global.pem

我希望将它们导入新的密钥库。

某些站点build议使用DER格式,并逐个导入它们,但由于密钥未被识别而失败。

另一个网站build议一个特殊的“ImportKey”类来运行导入,这工作,直到我看到链断了。 即在证书链长度是1,忽略中间和约。

一些网站build议PKCS7,但我甚至不能得到一个链。 其他的build议PKCS12格式,但就我的testing失败,以及获得整个链。

任何build议或提示都非常受欢迎。

这可能并不完美,但是我对使用keytool一些注意事项进行了修改。

  1. 将根或中级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 

    这应该导致类似于以下格式的文件。

    BEGIN证书

    结束证书
    开始RSA私钥

    结束RSA私钥

  3. 将已签名的主证书和密钥导入到现有的Java密钥库:

     keytool -import -trustcacerts -alias yourdomain -file combined.pem -keystore yourkeystore.jks 

将所有* .pem文件连接成一个pem文件,如all.pem然后用私钥+ all.pem创buildp12格式的密钥库

 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 

如上所述,keytool不提供从单个(组合)文件导入证书+私钥的方法。 它运行良好,但只有证书被导入,而私钥被忽略。 你可以通过keytool -list -v -keystore yourkeystore.jks检查它 – 你的域名是TrustedCertEntry,而不是PrivateKeyEntry。

因此,要解决最初的问题,首先应该使用openssl(或类似工具)创buildPKCS#12密钥库,然后使用keytool -importkeystore导入密钥库。