tomcat 异常错误:回复中的公钥与密钥库中的公钥不匹配

fhity93d  于 2022-11-13  发布在  其他
关注(0)|答案(5)|浏览(432)

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 AccessCertificate AssistantCreate 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
从零开始多次启动该过程。
我错过了什么?

kcugc4gi

kcugc4gi1#

您需要先按照根证书的顺序安装证书,然后是中间证书,最后是您自己的个人服务器密钥。您可以通过查看颁发给您的证书和查看信息来检查证书链的顺序。

eeq64g8w

eeq64g8w2#

根据您执行的步骤,您首先创建了一个密钥库(在其中生成了一个私钥),然后您尝试将证书导入到密钥库中。您使用了在生成密钥存储库时新生成的私钥。
当你有pfx与你,你可以直接转换它使用下面的keytool命令:

keytool -importkeystore -srckeystore domain.pfx -srcstoretype pkcs12 -destkeystore name_of_the_keystore_file.jks -deststoretype jks
shstlldc

shstlldc3#

我建议使用XCA来颁发证书。它有CA,HTTPS服务器端HTTPS客户端的预定义模板,所以很容易做你想要的事情。
至于密钥库,我建议使用portecle。同样,很好的GUI和相当容易使用。从XCA数据库导出证书,并使用portecle导入它们。然后保存为jks。

8i9zcol2

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有列出证书内容的命令。

nbysray5

nbysray55#

问题:keytool -导入-别名tomcat -密钥库keystore.jks -文件secure.mysite.com.crt密钥工具错误:java.lang.Exception:回复中的公钥与密钥库中的公钥不匹配
请将别名从tomcat更改为任何其他别名,因为您正在为密钥库使用相同的别名-genkey

相关问题