keytool -import -alias tomcat -keystore keystore.jks -file secure.mysite.com.crt
keytool错误:java.lang.Exception:回复中的公钥与密钥库中的公钥不匹配
我完全按照苹果技术说明中的说明操作。
这使得我可以创建自己的CA身份,然后使用该CA为我的内部服务器颁发SSL证书(全部通过Apple的Keychain完成)。在服务器(Tomcat 6)上,我使用keytool
导入.p12
(从Apple的Keychain导出),并将其合并到一个新的.jks
密钥库中,随后在Tomcat中配置该密钥库。这一切都工作正常。
然而,我遇到的所有指南和文档even the one from Tomcat itself都说要从keytool
生成CSR,然后将CA的响应证书导入.jks
。出于多种原因,我想通过证书签名请求方法来完成此操作,但我已经努力了几天才能让它工作。
我的步骤是:
- 按照第一个链接中的说明,在Apple的Keychain上创建自己的CA。
- 将自己的CA导出为
myCA.cer
,如第一个链接中所述。 - 从Tomcat的服务器计算机:
keytool -genkey -alias tomcat -keyalg RSA -keystore keystore.jks
**密码:**密钥库密码
**租用者传递:**密钥库传递
**姓名:**secure.mysite.com
**其他信息:**stuff
**输入<tomcat>
的密钥密码:**密钥存储密码
keytool -certreq -alias tomcat -keyalg -RSA -keystore keystore.jks -file secure.mysite.com.csr
- 接下来我打开苹果
Keychain Access
〉Certificate Assistant
〉Create a Certificate For Someone Else as a Certificate Authority...
- 我将
secure.mysite.com.csr
拖动到所需区域 - 选择我自己的CA,选择有效时间,提供证书信息
通用名称:secure.mysite.com
和其他信息
- 确保在扩展密钥使用扩展下启用SSL服务器验证
- 请确保dNSName在“主题备用名称扩展”下为
secure.mysite.com
- 现在我的钥匙串中有了
secure.mysite.com
(证书和私钥)。 - 我将
secure.mysite.com
导出为.p12
(与链接的文档中相同) - 然后提取证书和密钥:
openssl pkcs12 -in secure.mysite.com.p12 -nokeys -out secure.mysite.com.crt
个
x1米20英寸
- 最后,我尝试将证书导入回密钥库
keytool -import -alias root -keystore keystore.jks -trustcacerts -file myCA.cer
**是否要信任:**是
一切都好。
keytool -import -alias tomcat -keystore keystore.jks -file secure.mysite.com.crt
个
keytool错误:java.lang.Exception:回复中的公钥与密钥库中的公钥不匹配
我已经尝试了导入和不导入myCA.cert
。
我曾尝试直接以.cer
从Keychain导出secure.mysite.com
。
从零开始多次启动该过程。
我错过了什么?
5条答案
按热度按时间kcugc4gi1#
您需要先按照根证书的顺序安装证书,然后是中间证书,最后是您自己的个人服务器密钥。您可以通过查看颁发给您的证书和查看信息来检查证书链的顺序。
eeq64g8w2#
根据您执行的步骤,您首先创建了一个密钥库(在其中生成了一个私钥),然后您尝试将证书导入到密钥库中。您使用了在生成密钥存储库时新生成的私钥。
当你有pfx与你,你可以直接转换它使用下面的keytool命令:
shstlldc3#
我建议使用XCA来颁发证书。它有CA,HTTPS服务器端HTTPS客户端的预定义模板,所以很容易做你想要的事情。
至于密钥库,我建议使用portecle。同样,很好的GUI和相当容易使用。从XCA数据库导出证书,并使用portecle导入它们。然后保存为jks。
8i9zcol24#
我会说最后一个命令应该是“keytool -importcert”,而不是您的“keytool -import”。
引用Java 8的文档(因为你没有提到你的Java版本)[1]
导入证书有两个原因:将其添加到受信任证书列表中,并导入从证书颁发机构(CA)收到的证书答复,作为向该CA提交证书签名请求的结果
[1] http://docs.oracle.com/javase/8/docs/technotes/tools/unix/keytool.html#keytool_option_importcert
更新日期:
我的错-命令名应该不重要。后来在同一文档中说,“-import”和“-importcert”是同义词。
此命令在早期版本中被命名为-import。此版本中仍支持此旧名称。今后首选新名称-importcert。
问题:
文件
secure.mysite.com.crt
包含单个证书还是证书链?根据[1],当它是一个链时,该链的顺序应该是用户(您的)证书在前,然后是零个或多个CA证书。
我认为你可以从你的密钥库中导出公钥,然后手动将其与你试图导入的公钥进行比较。OpenSSL有列出证书内容的命令。
nbysray55#
问题:keytool -导入-别名tomcat -密钥库keystore.jks -文件secure.mysite.com.crt密钥工具错误:java.lang.Exception:回复中的公钥与密钥库中的公钥不匹配
请将别名从tomcat更改为任何其他别名,因为您正在为密钥库使用相同的别名-genkey