【问题标题】:keytool error: java.lang.Exception: Failed to establish chain from replykeytool 错误:java.lang.Exception:无法从回复建立链
【发布时间】:2014-05-12 14:26:37
【问题描述】:

生成密钥库:

keytool -genkey -alias tomcat -keyalg RSA -keystore my.keystore -keysize 2048

生成证书签名请求 (CSR):

keytool -certreq -alias tomcat -keyalg RSA -file my.csr -keystore my.keystore

然后我去找我的托管服务提供商并获得一些证书。这些我安装如下:

keytool -import -alias root -keystore my.keystore -trustcacerts -file gd_bundle-g2-g1.crt
keytool -import -alias intermed -keystore my.keystore -trustcacerts -file gdig2.crt
keytool -import -alias tomcat -keystore my.keystore -trustcacerts -file my.crt

安装最终证书 (my.crt) 时出现以下错误:

keytool error: java.lang.Exception: Failed to establish chain from reply

我相信我已经按照正确的顺序导入了链条,所以我对这条消息感到非常困惑。谁能看到我做错了什么?

【问题讨论】:

  • @user207421 这个问题早于您链接的问题。较新的问题将是重复的,而不是旧的。我不会说您链接的问题与此问题重复

标签: tomcat ssl-certificate keytool


【解决方案1】:

我刚刚发现 Godaddy 提供给我的证书的文件都是中间证书(实际上它们似乎都是同一个中间证书)。

我通过双击我的证书并查看证书路径获得了正确的根证书和中间证书...从这里我还可以下载这些证书中的每一个并使用问题中使用的步骤来导入它们

【讨论】:

  • 我去了certs.godaddy.com/repository 的godaddy 证书商店并抓住了 "gdroot-g2.crt" ,安装了它,然后我就可以安装我的证书了。
  • 似乎原因是keytool没有导入包中的所有证书。
  • 这个帖子救了我很多次。当您获得证书时,godaddy 为您提供的 zip 包括两个中间证书(您只需要其中一个)和您的证书。它缺少根证书。他们不好。
【解决方案2】:

我在同一个问题上苦苦挣扎了大约两个星期,直到找到解决方法。问题是我的 Godaddy 证书附带的根证书和中间证书不是我需要的。我在 Godaddy 的存储库中查找了很多次都找不到合适的证书。

我在笔记本电脑上查看了我的证书(使用 Windows 8.1)。在那里我看到了证书链,我能够导出根证书和中间证书。然后我将它们导入到我的密钥库中,它可以正常工作。

要做到这一点,请按照以下说明操作:

  1. 在运行 Windows 的计算机上查看您的证书。您将能够在第三个选项卡上看到证书链,如下图所示。

  2. 从链中选择根证书并点击“查看证书”按钮。

  3. 会打开一个新窗口,转到第二个选项卡并单击“保存文件”按钮。这将为您的证书打开一个导出向导。
  4. 导出时,选择 X.509 base 64 选项并按照说明进行操作。保存文件。
  5. 为中间证书重复。
  6. 将这两个证书上传到您的服务器并按照顺序导入密钥库 - 第一个根证书,第二个中间证书,最后是您的证书。 [不需要导入根证书]

注意: 在我导入这些证书之前,我必须删除那些在我的密钥库中并且不起作用的证书。为此,我使用了以下说明:

keytool -delete -alias [root] -keystore [keystore file]

如果您不确定您的 keytool 里面有什么,您可以使用以下方法查看:

keytool -list -keystore [keystore file]

【讨论】:

  • 这是我能找到的最佳答案!谢谢。
  • 按照您的说明,我能够从提供的证书中提取中间证书,非常感谢
【解决方案3】:

在 Linux 环境中尝试将 CA 认证的证书导入密钥库时,我遇到了同样的错误。

我按照步骤并成功导入。

收到 CA 认证证书后,使用以下步骤将证书导入密钥库。

第 1 步:

使用以下命令将根证书导入到 JAVA_HOME/jre/lib/security 文件夹中的 cacerts:

keytool -importcert -alias root -file [root certificate] -keystore cacerts

输入以上命令后会提示输入密码,输入密码后点击yes。

第 2 步:

使用以下命令导入根证书:

keytool -importcert -alias root -file [root certificate] -keystore [keystore file name]

输入以上命令后会提示输入密码,输入密码后点击yes。

第三步:

使用以下命令导入中间证书:

keytool -importcert -alias intermediate -file [intermediate certificate] -keystore [key store file name]

一旦你输入上面的命令,它会提示替换已经存在的证书输入yes。

注意:中间证书是可选的,可以忽略,它是根证书自带的。

第四步:

使用以下命令导入站点证书:

keytool -trustcacerts -importcert -alias [alias name which give during keystore creation] -file [site certificate] -keystore [key store file name]

执行此命令的环境为java版本7。证书由GODADDY颁发。

更多信息请参考网站:http://docs.oracle.com/javase/7/docs/technotes/tools/windows/keytool.html#importCertCmd

【讨论】:

    【解决方案4】:

    要解决此问题,请在 keytool 命令中使用额外的开关 (-trustcacerts)。

    将中间证书从 middle.cer 文件导入到 certificate.ks 密钥库文件的命令应如下所示:

    keytool -storetype JCEKS -storepass passwd -keystore certificate.ks -import -alias intermediate -trustcacerts -file intermediate.cer

    将证书从 http.cer 文件导入到 certificate.ks 密钥库文件的命令应如下所示:

    keytool -storetype JCEKS -storepass passwd -keystore certificate.ks -import -alias http -trustcacerts -file http.cer

    重新尝试完成签名 SSL 证书的创建和导入过程。

    【讨论】:

      【解决方案5】:

      下载证书链,在 Windows 上打开它 - 它存储 CA 证书和来自 CA 的证书答案。

      首先将 CA 证书导入您的密钥库,然后从 CA 导入答案。

      【讨论】:

      • 对我来说,这是由于使用了相同的别名,该别名已经存在于密钥库文件中。
      【解决方案6】:

      在将证书导入本地密钥库之前,以下步骤非常重要。收到 CA 的签名证书后)。

      使用以下命令将根证书导入到 JAVA_HOME/jre/lib/security 文件夹中的 cacerts:

      keytool -importcert -alias root -file [根证书] -keystore cacerts 一旦你输入上面的命令,它会提示输入密码,输入密码并点击yes。

      【讨论】:

        猜你喜欢
        • 2012-10-31
        • 2016-12-25
        • 2014-11-16
        • 1970-01-01
        • 1970-01-01
        • 2022-09-28
        • 2019-01-11
        • 2013-01-31
        • 1970-01-01
        相关资源
        最近更新 更多