10

我有来自 CA 的公共证书。我想使用此证书创建 Java SSL 连接。我提到了如何在特定连接上使用不同的证书?带有自签名证书的 Java SSL 连接,无需将完整的密钥库复制到客户端。由此我了解到我需要将证书导入密钥库。但是我没有从 CA 收到任何密钥库。我创建了一个密钥库并尝试将公共证书导入其中。但后来我收到以下错误:

keytool 错误:java.lang.Exception:回复中的公钥和密钥库不匹配

我需要来自 CA 的密钥库还是我做错了什么?


用于创建密钥库的命令:

keytool -genkey -alias tomcat -keyalg RSA -keystore keystore.jks

用于导入证书的命令:

keytool -import -v -alias tomcat -file signed-cert.pem -keystore keystore.jks
4

4 回答 4

7

我认为您没有正确遵循证书登录过程。查看此讨论https://forums.oracle.com/thread/1533940以按照以下步骤正确实施它们:

  1. 创建一个密钥库 keytool -genkey -keyalg RSA -keystore test.keystore -validity 360 (这会生成一个密钥库和一个别名为“mykey”的密钥 (DC))

  2. 创建证书签名请求 (CSR)。 keytool -certreq -keyalg RSA -file test.csr -keystore test.keystore (这会生成一个文本 CSR 文件)

  3. 已生成签名证书:http: //www.instantssl.com/ssl-certificate-support/csr_generation/ssl-certificate-index.html

  4. 导入的签名证书(如果从第 3 步粘贴签名证书,请注意 CRLF) keytool -import -alias newkey -file <signed cert file> -keystore test.keystore (重要的是,它的别名与第 1 步不同(默认为“mykey”)?

  5. 导出公钥供客户使用 keytool -export -alias mykey -file test.publickey -keystore test.keystore

在服务器系统上

  1. 创建一个信任 keytool -genkey -keyalg RSA -keystore test.truststore -validity 360 库(这会生成一个密钥库和一个别名为“mykey”的密钥(DC))

  2. 导入公钥 - 用于通过客户端测试 SSL SOAP 服务 keytool -import -file test.publickey -keystore test.truststore

问题是让步骤 1 和 6 中的别名默认为“mykey”。当我将第 6 步更改为: keytool -genkey -alias testAlias -keyalg RSA -keystore test.truststore -validity 360

您可以使用上面的步骤 7 导入(尽管我-alias apublickey在步骤 7 中添加了“”)。这对我有用。

于 2013-06-13T09:31:35.680 回答
4

您可以使用keyStore explorer gui 工具生成密钥库/证书并将证书导入/导出到密钥库。

于 2015-03-19T09:16:42.863 回答
1

请将别名从 tomcat 更改为任何其他,因为您对 Keystore -genkey 使用相同的别名

于 2018-05-24T17:36:05.977 回答
0

在密钥库中导入 SSL 证书时,我遇到了同样的问题。在我的情况下,链中缺少根 CA 的证书。我将根证书导出到一个文件中,然后手动导入到密钥库中。

于 2017-02-08T12:31:13.533 回答