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

新手上路,请多包涵

我必须访问托管在端口 443 的 Web 服务。服务提供商已与我们共享三个证书。

  1. ABCD文件
  2. CA_证书.cer
  3. CCA_证书.cer

我必须通过为 SSL 通信创建一个表单链来将它们添加到密钥库中。我已按照以下步骤操作。

  1. keytool -keystore npci_keystore_test.jks -genkey -alias npci_client_testore
       Result :- keystore npci_keystore_test.jks created.

  1. keytool -import -keystore npci_keystore_test.jks -file CA_Certificate.cer -alias theCARoot
       Result :- certificate CA_Certificate.cer is added to keystore.

  1. keytool -import -keystore npci_keystore_test.jks -file CCA_Certificate.cer -alias theCCARoot
       Result :- certificate CCA_Certificate.cer is added to keystore.

  1. keytool -import -keystore npci_keystore_test.jks -file ABCD.cer -alias npci_client_testore

在第 4 步,我有以下异常

输入密钥库密码:(当我输入密码时出现以下异常)

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

我已经在 SO 中进行了搜索,但到目前为止还没有运气。

我正在按照以下来源创建商店并在其中导入证书。 JKS 密钥库

编辑: - -

我已经通过更改证书的导入顺序对其进行了测试,但到目前为止还没有成功。

原文由 dReAmEr 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
2 个回答

您问题中的链接解释了如何为服务器创建 SSL 密钥库,这不是您想要做的。你所做的是:

  1. 创建一个新的密钥对
  2. 将受信任的证书添加到密钥库
  3. 将另一个受信任的证书添加到密钥库
  4. 尝试将服务器的 SSL 证书导入为您的密钥对的证书

第 4 步失败,因为 SSL 证书是为完全不同的密钥对生成的。

三个证书大概是:

  1. Web服务的SSL证书
  2. 签署 SSL 证书的 CA 证书
  3. 签署 CA 的根证书

您现在要做的是将信任锚添加到您的信任库(默认情况下: ${JAVA_HOME}/jre/lib/security/cacerts ),结果是您的客户端接受 web 服务的 SSL 证书。

通常,SSL 服务器在 SSL 握手期间将除根证书之外的整个链发送给客户端。这意味着您必须将根证书添加到您的信任库:

 keytool -import -keystore ${JAVA_HOME}/jre/lib/security/cacerts -file CCA_Certificate.cer -alias theCCARoot

如果 web 服务需要 SSL 客户端身份验证,则需要执行其他步骤,但您从未提及客户端身份验证,因此我认为没有必要。

原文由 Omikron 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题