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

问题描述 投票:0回答:5

keytool -import -alias tomcat -keystore keystore.jks -file secure.mysite.com.crt

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

我已完全按照本 Apple 技术说明中的说明进行操作。
https://developer.apple.com/library/mac/technotes/tn2326/_index.html

这使我能够创建自己的 CA 身份,然后使用该 CA 为我的内部服务器颁发 SSL 证书(全部通过 Apple 的钥匙串完成)。在服务器(Tomcat 6)上,我使用

keytool
导入
.p12
(从 Apple 的钥匙串导出)并将其合并到稍后在 Tomcat 中配置的新
.jks
密钥库中。一切都很好。

然而,我遇到的所有指南和文档,甚至是 Tomcat 本身的指南和文档,都说从 keytool 生成

CSR
,然后将 CA 的响应证书导入回
.jks
。出于多种原因,我想通过证书签名请求方法来做到这一点,但我已经努力让它工作几天了。

我的步骤是:

  • 按照第一个链接中所述在 Apple 钥匙串上创建自己的 CA。
  • 将自己的 CA 导出为

    myCA.cer
    ,如第一个链接中所述。

  • 来自 Tomcat 的服务器计算机:

    keytool -genkey -alias tomcat -keyalg RSA -keystore keystore.jks

    密码:密钥库密码
    租客通行证:密钥库通行证
    名字和姓氏: secure.mysite.com
    其他信息:东西
    输入
    <tomcat>
    的密钥密码:
    keystorepass

  • keytool -certreq -alias tomcat -keyalg -RSA -keystore keystore.jks -file secure.mysite.com.csr

  • 接下来我打开Apple

    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

    openssl pkcs12 -in secure.mysite.com.p12 -nocerts -nodes -out secure.mysite.com.key

  • 最后,我尝试将证书导入回密钥库

    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

我尝试过直接以
secure.mysite.com
格式从钥匙串导出
.cer

从头开始这个过程多次。

我在这里缺少什么?

tomcat ssl keystore keychain keytool
5个回答
-1
投票

我建议使用XCA来颁发证书。它具有针对 CA、HTTPS 服务器端 HTTPS 客户端的预定义模板,因此可以很轻松地执行您想要的操作。

至于密钥库,我建议使用portecle。再说一遍,GUI 很好,而且很容易使用。从 XCA 数据库导出证书并使用 portecle 导入它们。然后另存为jks。


-1
投票

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


-1
投票

根据您执行的步骤,您首先创建了一个密钥库(其中生成了私钥),然后尝试将证书导入到密钥库中。但是在命令中您没有使用使用

openssl
转换的私钥;您使用了生成密钥库时新生成的私钥。

当您拥有 pfx 时,您可以立即使用以下 keytool 命令对其进行转换:

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

-1
投票

问题:keytool -import -alias tomcat -keystore keystore.jks -file secure.mysite.com.crt keytool 错误:java.lang.Exception:回复中的公钥与密钥库不匹配

请将别名从 tomcat 更改为任何其他别名,因为您对 Keystore -genkey 使用相同的别名


-1
投票

1

问题:

文件

secure.mysite.com.crt
包含单个证书还是一系列证书?

根据[1],当它是一条链时,该链应首先以用户(您的)证书排序,然后是零个或多个CA证书。

我认为您可以从密钥库中导出公钥,然后手动将其与您尝试导入的公钥进行比较。 OpenSSL 具有列出证书内容的命令。

© www.soinside.com 2019 - 2024. All rights reserved.