我必须访问在443端口托管的Web服务。服务提供商与我们共享了三个证书。
我必须通过为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步,我有以下例外
输入密钥库密码:(当我输入密码时,我有以下异常)
keytool错误:java.lang.Exception:回复中的公钥和密钥库不匹配我已经在SO中进行了搜索,但到目前为止还没有运气。
我按照以下来源创建商店并导入证书。 JKS Keystore
编辑: - -
我已经通过更改证书的导入顺序对其进行了测试,但到目前为止还没有运气。
您的问题中的链接说明了如何为服务器创建SSL密钥库,这不是您想要做的。你做的是:
步骤4失败,因为SSL证书是为完全不同的密钥对生成的。
这三个证书可能是:
您现在要做的是向信任库添加信任锚(默认情况下:${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客户端身份验证,但您从未提及客户端身份验证,则需要执行其他步骤,因此我认为没有必要。
此处的问题是导入证书时使用的别名,类似于您在创建JKS存储时使用的别名。只需更改别名即可解决您的问题。源文件[1]需要相应更正。
[1] http://docs.oracle.com/cd/E19509-01/820-3503/ggfgo/index.html
在4点(你得到错误:keytool错误:java.lang.Exception:回复和密钥库中的公钥不匹配)你导入证书的地方,请更改别名。别名不应该是npci_client_testore,因为它已经用于密钥库的别名。
在我的情况下,链中缺少“签署CA的根证书”。请检查您是否拥有相应的ROOT CA证书,否则从Intermediate中将其导出并将其导入密钥库。将根CA导入我的密钥库对我有用。
我有与Tomcat8托管相同的异常错误(密钥库不匹配)。如果您在创建密钥库时输入了wrong domain name
或no domain name
,则需要再次重新创建密钥库文件,然后再次将CSR重新提交给您的许可/认可/批准的证书颁发机构(CA)颁发数字签名证书(Godaddy in my案件)。
以下是创建密钥库文件的命令:
keytool -keysize 2048 -genkey -alias tomcat -keyalg RSA -keystore tomcat.keystore
keytool -importkeystore -srckeystore tomcat.keystore -destkeystore tomcat.keystore -deststoretype pkcs12
(当提示要求输入姓名时,您需要输入域名,它要求完全限定域名(FDQN),例如www.example.com)。从城市,州和省 - do not abbreviate
输入以下命令以创建CSR(与tomcat.keystore位置在同一目录中):
keytool -certreq -keyalg RSA -alias tomcat -file myFQDN.csr -keystore tomcat.keystore
注意:由于我之前的错误,我不得不从我的Windows控制台(MMC)删除所有Godaddy证书。
从证书颁发机构准备好证书文件后。下载文件并双击每个.crt文件,在Windows中重新安装它们(选择自动安装在本地计算机中)。确保备份tomcat.keystore文件,然后将这些证书文件IN ORDER导入到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="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="443" />
<Connector
URIEncoding="UTF-8"
SSLEnabled="true"
clientAuth="false"
keystoreFile="C:\Program Files\Java\jdk1.8.0_181\bin\tomcat.keystore"
keystorePass="changeme"
maxThreads="200"
port="443"
scheme="https"
secure="true"
sslProtocol="TLS" />
瞧!浏览域时会出现锁定图标(安全连接)。
这对我有用:
keytool -keystore yourkeystorename -importcert -alias certificatealiasname -file certificatename.cer