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

Edd*_*Edd 26 tomcat keytool ssl-certificate

生成密钥库:

keytool -genkey -alias tomcat -keyalg RSA -keystore my.keystore -keysize 2048
Run Code Online (Sandbox Code Playgroud)

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

keytool -certreq -alias tomcat -keyalg RSA -file my.csr -keystore my.keystore
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

当我安装最终证书(my.crt)时,我收到以下错误:

keytool error: java.lang.Exception: Failed to establish chain from reply
Run Code Online (Sandbox Code Playgroud)

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

Edd*_*Edd 26

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

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

在此输入图像描述

  • 我去了https://certs.godaddy.com/repository的godaddy cert商店并抓住了"gdroot-g2.crt",安装了它,然后我就可以安装我的证书了. (4认同)

小智 17

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

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

为此,请按照以下说明操作:

  1. 在运行Windows的计算机上查看证书.您将能够在第三个选项卡上看到证书链,该链接看起来如下图所示.在此输入图像描述

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

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

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

keytool -delete -alias [root] -keystore [keystore file]
Run Code Online (Sandbox Code Playgroud)

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

keytool -list -keystore [keystore file]
Run Code Online (Sandbox Code Playgroud)


小智 14

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

我按照一组步骤并成功导入它.

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

步骤1:

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

keytool -importcert -alias root -file [root certificate] -keystore cacerts
Run Code Online (Sandbox Code Playgroud)

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

第2步:

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

keytool -importcert -alias root -file [root certificate] -keystore [keystore file name]
Run Code Online (Sandbox Code Playgroud)

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

第3步:

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

keytool -importcert -alias intermediate -file [intermediate certificate] -keystore [key store file name]
Run Code Online (Sandbox Code Playgroud)

一旦你输入上面的命令,它将提示替换已经证书输入yes.

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

第4步:

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

keytool -trustcacerts -importcert -alias [alias name which give during keystore creation] -file [site certificate] -keystore [key store file name]
Run Code Online (Sandbox Code Playgroud)

执行此环境的命令是java版本7.证书由GODADDY发布.

了解更多信息,请访问网站:http://docs.oracle.com/javase/7/docs/technotes/tools/windows/keytool.html#importCertCmd