将公共证书导入密钥库时出错

时间:2013-06-13 09:02:29

标签: java certificate ssl-certificate keystore keytool

我有来自CA的公共证书。我想使用此证书创建Java SSL连接。我提到了How can I use different certificates on specific connections?Java SSL connection with self-signed certificate without copying complete keystore to client。据我所知,我需要将证书导入密钥库。但是我还没有从CA收到任何密钥库。我创建了一个密钥库,并尝试将公共证书导入其中。但后来我收到以下错误:

keytool error: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 个答案:

答案 0 :(得分:5)

我认为您没有正确遵循证书登录过程。通过以下步骤查看此讨论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

  6. 在服务器系统上

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

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

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

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

答案 1 :(得分:3)

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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