当前位置: 首页 > 面试题库 >

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

安建木
2023-03-14
问题内容

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

  1. ABCD.cer
  2. CA_Certificate.cer
  3. CCA_Certificate.cer

我必须通过为SSL通信创建表单链将它们添加到密钥库中。我遵循以下步骤。

  1. keytool -keystore npci_keystore_test.jks -genkey -alias npci_client_testore

       Result :- keystore npci_keystore_test.jks created.
    
  2. keytool -import -keystore npci_keystore_test.jks -file CA_Certificate.cer -alias theCARoot

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

       Result :- certificate CCA_Certificate.cer is added to keystore.
    
  4. keytool -import -keystore npci_keystore_test.jks -file ABCD.cer -alias npci_client_testore

在步骤4中,我有以下异常

输入密钥库密码:(并且当我输入密码时,我有以下异常)

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

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

我正在按照下面的源代码创建存储并在其中导入证书。
JKS密钥库

编辑: - -

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


问题答案:

您问题中的链接说明了如何为服务器创建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客户端身份验证,则需要采取其他步骤,但是您从未提到过客户端身份验证,因此我认为这不是必需的。



 类似资料:
  • 我用过这个命令 生成密钥库。它工作正常,但从我读到的内容来看,这个命令还应该提示您输入密钥密码(而不是存储密码)?我从来没有收到过这样的提示。我能跑 查看密钥库的内容。钥匙似乎就在那里。。。正确的别名在那里。在哪里获取/设置特定别名的密码? 我有一个key.properties在Android目录 在build.gradle我有: 当我试图生成一个发布版本时,我得到了 我想它可能与keyPassw

  • 我创建了一个密钥库,它包括私钥和公钥。我需要使用java代码检索我的公钥和私钥。我在这里找到了一个检索私钥的方法。但我找不到检索公钥的方法。有人能告诉我一种取出公钥的方法吗

  • 我们需要使用Azure key vault创建RSA密钥对,并将RSA公钥复制到外部系统。其要求是外部系统使用公钥加密数据,内部系统与azure key vault对话并对数据进行解密。我还没有访问Azure key vault的权限,所以需要查看文档。我有两个基本问题: > 有没有一种方法可以使用Azure portal以文本格式导出RSA公钥,而不使用API(https://docs.micr

  • 我看到钥匙和mModulas是相等的,有人知道吗?

  • 2)生成CA证书请求 3)生成自签有效期-10年 4)使用KeyStoreExplorer这样的程序将密钥对(私钥和自签名证书)导入到新的JKS中

  • 我试图为某些设备生成密钥时出错。我能够在运行4.4.2的三星Galaxy Note上重现错误。 我创建了一个小应用程序,只能通过从Android开发者页面“生成新私钥”下的https://developer.android.com/training/articles/keystore.html逐行复制代码来生成密钥 错误似乎发生在kpg.generateKeyPair(),在Android Key