将证书导入为PrivateKeyEntry

时间:2014-07-26 18:41:28

标签: ssl keystore keytool

我正在Tomcat服务器上安装SSL,并且遵循颁发者https://knowledge.rapidssl.com/support/ssl-certificate-support/index?page=content&actp=CROSSLINK&id=SO16181的这些说明并且声明:

Verify the following information:

The SSL certificate is imported into the alias with the "Entry Type" of 
PrivateKeyEntry or KeyEntry.  If not, please import the certificate into 
the Private Key alias.

当我导入证书(tomcat)时,我正在使用:

keytool -import -trustcacerts -alias your_alias_name -keystore your_keystore_filename
-file your_certificate_filename

但是当我这样做时,它会导入为trustCertEntry

Keystore type: JKS
Keystore provider: SUN

Your keystore contains 3 entries

primaryca, Jul 26, 2014, trustedCertEntry,
Certificate fingerprint (SHA1): <snip>
tomcat, Jul 26, 2014, trustedCertEntry,
Certificate fingerprint (SHA1):  <snip>
secondaryca, Jul 26, 2014, trustedCertEntry,
Certificate fingerprint (SHA1):  <snip>

如何将别名tomcat导入为PrivateKeyEntry?

3 个答案:

答案 0 :(得分:7)

摆脱-trustcacerts选项。它不是CA证书。它是您的证书。并使用私钥已经拥有的相同别名。

答案 1 :(得分:4)

这些CA指南有点误导。 @EJP正确地说你不应该使用-trustcacerts作为你的证书。

此外,此CA文档建议在单独的操作中导入主CA证书和中间CA证书,这样可以得到如下结果:

primaryca, Jul 26, 2014, trustedCertEntry,
Certificate fingerprint (SHA1): <snip>
secondaryca, Jul 26, 2014, trustedCertEntry,
Certificate fingerprint (SHA1):  <snip>
tomcat, Jul 26, 2014, PrivateKeyEntry,
Certificate fingerprint (SHA1):  <snip>

不幸的是,像这样导入密钥库中的CA证书毫无意义。 (它在truststore中很有用,但您使用的CA可能已经在默认信任库中。)

确实在密钥库中拥有证书的CA证书非常有用,以便在需要中间证书时提供完整的证书链。但是,密钥管理器(除非可能是自定义实现)不会为您构建链,即使它在您的最终实体证书旁边找到合适的CA证书(在PrivateKeyEntry中)。

您需要将这些证书一起作为链导入到您的私钥所在的条目中。为此,请将证书连接在一个文本文件(PEM编码)中,首先是服务器证书,然后是用于颁发证书的证书,依此类推。然后,使用该私钥别名将该文件导入密钥库。 (这与this question中的问题完全相同,但使用服务器证书。)

(我不确定您的CA是否已将您的证书文件作为链条提供给您,但通常情况下,您只能在一个文件中获得您的证书,而在另一个文件中至少获得中间CA证书。您链接的文档似乎有误导性,因为他们没有提到--BEGIN/END CERT--之间的多个块,但他们的示例屏幕截图的证书长度为4,而该单个别名。)

正如@jww在你的问题评论中指出的那样,你不需要&#34; root&#34;此链中的CA证书(自签名证书),因为您的客户端已经信任它,或者在您发送它时没有理由信任它。将它放在你的链中并没有错,但它没有意义,并且可能会增加一些网络开销。

答案 2 :(得分:4)

您尝试添加证书并期望它是私钥 - 它在两个不同的东西之间混淆。

通常,当您创建密钥库(.jks)时,它包含私钥。 如果它是空的(已删除),您应该从密钥和证书生成包(.p12文件)。

为了创建新的免费密钥和证书,您可以使用openSCl https://zerossl.com的此实现。

然后,您已经获得了一个密钥和证书,您应该从中生成(.p12)捆绑文件:(在Linux机器上)

openssl pkcs12 -export -in [filename-certificate] -inkey [filename-key] -name [host] -out [filename-new-PKCS-12.p12]

现在,只需执行以下命令,即可将捆绑文件(.p12文件)添加到密钥库(.jks):

keytool -importkeystore -deststorepass [password] -destkeystore [filename-new-keystore.jks] -srckeystore [filename-new-PKCS-12.p12] -srcstoretype PKCS12