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

6qftjkof  于 2023-01-13  发布在  Java
关注(0)|答案(7)|浏览(189)

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

  1. ABCD.cer
  2. CA_证书. cer
  3. CCA_证书
    我必须通过为SSL通信创建一个表单链来将它们添加到密钥库中。我遵循了以下步骤。
  4. 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步,我有以下例外
    输入密钥库密码:(当我输入密码时,我有以下例外)
    • 按键工具错误:java.lang.Exception:回复中的公钥与密钥库不匹配**

我已经在SO做了搜索,但到目前为止没有运气。
我按照下面的源代码创建存储和导入证书。JKS Keystore

    • 编辑:---**

我已经通过改变证书的导入顺序来测试它,但到目前为止没有运气。

tag5nh1u

tag5nh1u1#

此处的问题是您在导入证书时使用的别名,该别名与您在创建JKS存储时使用的别名相似。只需更改别名即可解决您的问题。需要相应地更正源文档[1]。
[1][http://docs.oracle.com/cd/E19509-01/820-3503/ggfgo/index.html](http://docs.oracle.com/cd/E19509-01/820-3503/ggfgo/index.html)

tyg4sfes

tyg4sfes2#

您问题中的链接解释了如何为服务器创建SSL密钥库,这不是您想要做的。您所做的是:
1.创建新密钥对
1.将受信任证书添加到密钥库
1.向密钥库中添加另一个受信任证书
1.尝试将服务器的SSL证书作为密钥对的证书导入
步骤4失败,因为SSL证书是为完全不同的密钥对生成的。
这三个证书大概是:

  1. Web服务的SSL证书
    1.签署SSL证书的CA证书
    1.签署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客户端身份验证,则需要执行额外的步骤,但您从未提到过客户端身份验证,因此我假设它没有必要。

alen0pnh

alen0pnh3#

在4点中(您得到错误的地方:* * 按键工具错误:java.lang.Exception:回复中的公钥与密钥库不匹配**),请更改别名。别名不应为npci_client_testore,因为它已用作密钥库的别名。

kg7wmglp

kg7wmglp4#

我在使用Tomcat 8托管时遇到了同样的异常错误(密钥库不匹配)。如果您在创建密钥库时输入了wrong domain nameno domain name,则需要再次重新创建密钥库文件,并再次将CSR重新提交给获得许可/认可/批准颁发数字签名证书的证书颁发机构(CA)(在我的情况下为Godaddy)。
以下是创建密钥库文件的命令:

keytool -keysize 2048 -genkey -alias tomcat -keyalg RSA -keystore tomcat.keystore
keytool -importkeystore -srckeystore tomcat.keystore -destkeystore tomcat.keystore -deststoretype pkcs12

(You我需要输入域名时,提示要求的名字和姓氏,它是要求完全合格的域名(FDQN),例如www.example.com)。从城市,州和省-do not abbreviate
输入以下命令创建CSR(从与tomcat.keystore位置相同的目录):

keytool -certreq -keyalg RSA -alias tomcat -file myFQDN.csr -keystore tomcat.keystore

注意:由于之前的“keystore don 't match”错误,我不得不从Windows控制台(MMC)中删除所有的Godaddy证书。
从证书颁发机构获取证书文件后,请下载这些文件并双击2个.crt文件中的每一个,以便在Windows中重新安装它们(选择自动安装在本地计算机中)。确保备份您的tomcat.keystore文件,然后按顺序将这些证书文件导入到您的tomcat.keystore文件中(从头开始),顺序与以下示例相同:

keytool -import -alias root -keystore tomcat.keystore -trustcacerts -file gdig2.crt.pem
keytool -import -alias intermed -keystore tomcat.keystore -trustcacerts -file gd_bundle-g2-g1.crt
keytool -import -alias tomcat -keystore tomcat.keystore -trustcacerts -file namewithnumbersandletters.crt

确保已更新server.xml,然后重新启动Tomcat

<Connector port="80" protocol="HTTP/1.1"
    relaxedQueryChars="|{}[]%-"
    connectionTimeout="20000"
    redirectPort="443" />  
<Connector  SSLEnabled="true" URIEncoding="UTF-8" 
    clientAuth="false" 
    keystoreFile="C:\Program Files\Java\jdk-11.0.9\bin\tomcat.keystore" 
    keystorePass="ChangeToYourPassword" 
    maxThreads="200" 
    port="443" 
    scheme="https" 
    secure="true" 
    sslProtocol="TLS"
    sslEnabledProtocols="TLSv1.2"
    />

瞧!在域上浏览时会出现锁定图标(安全连接)。

vaqhlq81

vaqhlq815#

当您尝试将证书导入到已有别名的现有jks文件时,会发生这种情况。如果您想使用相同的别名,请先删除jks中的旧别名及其关联证书,然后导入新别名。

wkyowqbh

wkyowqbh6#

这对我很有效:

keytool -keystore yourkeystorename -importcert -alias certificatealiasname -file certificatename.cer
lndjwyie

lndjwyie7#

与@Omikron的回答类似,我通过将TrustedRoot.crtDigiCertCA.crt文件添加到jre/lib/security/cacerts密钥库中来解决这个问题。

sudo keytool -import -alias ALIAS -file TrustedRoot.crt -storetype JKS -keystore ${JAVA_HOME}/jre/lib/security/cacerts -file DigiCertCA.crt

然后,我可以将证书导入到我自己的密钥存储库中。

keytool -import -trustcacerts -alias other_alias -file certificate.crt -keystore keystore.jks -keypass "password" -storepass "password1"

相关问题