我有来自CA的公共证书。我想使用此证书创建Java SSL连接。我提到了How can I use different certificates on specific connections?和Java SSL connection with self-signed certificate without copying complete keystore to client。据我所知,我需要将证书导入密钥库。但是我还没有从CA收到任何密钥库。我创建了一个密钥库,并尝试将公共证书导入其中。但后来我收到以下错误:
keytool error:java.lang.Exception:回复和密钥库中的公钥不匹配
我是否需要来自CA的密钥库或我做错了什么?
用于创建密钥库的命令:
keytool -genkey -alias tomcat -keyalg RSA -keystore keystore.jks
用于导入证书的命令:
keytool -import -v -alias tomcat -file signed-cert.pem -keystore keystore.jks
答案 0 :(得分:5)
我认为您没有正确遵循证书登录过程。通过以下步骤查看此讨论https://forums.oracle.com/thread/1533940以正确实施它们:
创建一个密钥库
keytool -genkey -keyalg RSA -keystore test.keystore -validity 360
(这会生成一个密钥库和一个别名为“mykey”的密钥(DC)
创建证书签名请求(CSR)。
keytool -certreq -keyalg RSA -file test.csr -keystore test.keystore
(这会生成一个文本CSR文件)
已签名证书:http://www.instantssl.com/ssl-certificate-support/csr_generation/ssl-certificate-index.html
导入签名证书
(如果粘贴第3步签署的证书,请留意CRLF)
keytool -import -alias newkey -file <signed cert file> -keystore test.keystore
(重要的是,它的别名与步骤1不同(默认为“mykey”)?
导出用于客户端使用的公钥
keytool -export -alias mykey -file test.publickey -keystore test.keystore
在服务器系统上
创建信任库
keytool -genkey -keyalg RSA -keystore test.truststore -validity 360
(这会生成一个密钥库和一个别名为“mykey”的密钥(DC)
导入公钥 - 用于通过客户端测试SSL SOAP服务
keytool -import -file test.publickey -keystore test.truststore
问题是让步骤1和6中的别名默认为“mykey”。
当我改变第6步时:
keytool -genkey -alias testAlias -keyalg RSA -keystore test.truststore -validity 360
您可以使用上面的步骤7导入(虽然我在步骤7中添加了“-alias apublickey
”)。
这对我有用。
答案 1 :(得分:3)
您可以使用keyStore explorer gui工具生成密钥库/证书以及将证书导入/导出到密钥库。
答案 2 :(得分:0)
我在密钥库中导入SSL证书时遇到了同样的问题。在我的情况下,链CA中缺少根CA的证书。我将根证书导出到一个文件中,并在密钥库中手动导入。
答案 3 :(得分:0)
请将别名从tomcat更改为任何其他别名,因为您使用的是Keystore -genkey的相同别名