java.lang.Exception:回复和密钥库中的公钥不匹配
我必须访问在443端口托管的Web服务。服务提供商与我们共享了三个证书。
- ABCD.cer
- CA_Certificate.cer
- CCA_Certificate.cer
我必须通过为SSL通信创建表单链将它们添加到密钥库。我已按照以下步骤操作。
-
keytool -keystore npci_keystore_test.jks -genkey -alias npci_client_testore
Result :- keystore npci_keystore_test.jks created.
-
keytool -import -keystore npci_keystore_test.jks -file CA_Certificate.cer -alias theCARoot
Result :- certificate CA_Certificate.cer is added to keystore.
-
keytool -import -keystore npci_keystore_test.jks -file CCA_Certificate.cer -alias theCCARoot
Result :- certificate CCA_Certificate.cer is added to keystore.
-
keytool -import -keystore npci_keystore_test.jks -file ABCD.cer -alias npci_client_testore
在第4步,我有以下例外
输入密钥库密码:(当我输入密码时,我有以下exception)
keytool错误:java.lang.Exception:回复和密钥库中的公钥不匹配
我已经在SO中搜索了,但到目前为止还没有运气。
我正在关注源代码以创建商店并导入证书。 JKS Keystore
编辑: – –
我已经通过更改证书的导入顺序对其进行了测试,但到目前为止还没有运气。
您的问题中的链接说明了如何为服务器创建SSL密钥库,这不是您想要做的。 你做的是:
- 创建一个新密钥对
- 将可信证书添加到密钥库
- 将另一个受信任的证书添加到密钥库
- 尝试将服务器的SSL证书导入为密钥对的证书
步骤4失败,因为SSL证书是为完全不同的密钥对生成的。
这三个证书可能是:
- Web服务的SSL证书
- 签署SSL证书的CA证书
- 签署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客户端身份validation,但您从未提及客户端身份validation,则需要执行其他步骤,因此我认为没有必要。
此处的问题是您在导入证书时使用的别名,该别名类似于您在创建JKS存储时使用的别名。 只需更改别名即可解决您的问题。 源文件[1]需要相应更正。
[1] http://docs.oracle.com/cd/E19509-01/820-3503/ggfgo/index.html
在我的情况下,链中缺少“签署CA的根证书”。 请检查您是否拥有相应的ROOT CA证书,否则将其从Intermediate中导出并将其导入密钥库。 通过将根CA导入我的密钥库为我工作。
在4点(你得到错误: keytool错误:java.lang.Exception:回复中的公钥和密钥库不匹配 )你导入证书的地方,请更改别名。 别名不应该是npci_client_testore,因为它已经用于密钥库的别名。
这对我有用
keytool -keystore yourkeystorename -importcert -alias certificatealiasname -file certificatename.cer
- HttpsUrlConnection和keep-alive
- SSLHandshakeException:收到致命警报:在Java 6 – > 8升级后的handshake_failure
- 信任所有证书的Mule HTTPS连接器
- 如何在Win10 / Tomcat7 / Java7上从Web应用程序启用TLSv1.1 +出站通信?
- 如何从java执行https GET请求
- maven release – > peer未通过身份validation
- javax.net.ssl.SSLException:无法识别的SSL消息,明文连接?
- HttpUnit WebConversation SSL问题
- 使用java代码将证书添加到密钥库