keytool错误:java.lang.Exception:无法从回复建立链

时间:2014-05-12 14:26:37

标签: tomcat ssl-certificate keytool

生成密钥库:

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

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

5 个答案:

答案 0 :(得分:26)

我刚刚发现godaddy提供的证书都是中间证书(实际上它们似乎都是相同的中间证书)。

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

enter image description here

答案 1 :(得分:16)

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

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

要执行此操作,请按照以下说明操作:

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

  2. 从链中选择根证书,然后单击按钮"查看证书"。

  3. 打开一个新窗口,转到第二个选项卡,然后单击"保存文件"按钮。这将为您的ceritficate打开导出向导。
  4. 导出时,选择X.509 base 64选项并按照说明操作。保存文件。
  5. 重复中间证书。
  6. 将两个证书上传到您的服务器并按照订单导入密钥库 - 第一个根,第二个中间,最后是您的证书。 [没有必要导入根证书]
  7. 注意: 在我导入这些证书之前,我必须删除我的密钥库中的那些证书并且不能正常工作。为此,我使用了以下说明:

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

    如果您不确定keytool中的内容,可以使用以下方式查看:

    keytool -list -keystore [keystore file]
    

答案 2 :(得分:14)

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

我按照一系列步骤成功导入了它。

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

第1步:

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

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

输入上述命令后,将提示输入密码,输入密码并单击是。

第2步:

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

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

输入上述命令后,将提示输入密码,输入密码并单击是。

第3步:

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

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

一旦您输入上述命令,它将提示替换已经存在的证书,输入yes。

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

第4步:

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

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

答案 3 :(得分:2)

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

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

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

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

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

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

答案 4 :(得分:1)

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

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