转自“小小的一亩田”的博客
更换服务证书的时候遇到这个问题,GOOGLE了一下,发现没答案。
研究了一会会儿,发现问题所在。其实很简单。
深为国内同行们觉得惭愧,不仅是懒,还大多通常不愿意分享自己的知识。GOOGLE技术问题常常会发现,一个中文答案抄来抄去,没人讨论也没人验证。。。或者干脆只有问没有答。。。唉!
企图答案共享,于是把这个问题贴到“百度知道”去了,结果居然发现还不能自问自答,说是有骗积分的嫌疑。。。$!$%%^%!! 谁稀罕那什么破积分啊?
直接在BLOG里写答案~ 啦啦啦~
-------------问题:
把CA签名后的server端证书导入keystore出错的问题:
C:\tomcat>keytool -import -alias tomcat -keystore c:\tomcat\keystore -trustcacer
ts -file c:\tomcat\1.cer
输入keystore密码: 123456
keytool错误: java.lang.Exception: 无法从回复中建立链接
-------------答案:
在导入服务器证书之前,需要导入一个中级CA根证书。这个CA根证书的有效期很长,一般不用更换。所以大多数人在导入中级CA根证书时会使用旧的证书。
当这个中级CA根证书有更新,导入中级CA根证书步骤仍使用旧的中级CA证书时,此步骤不会报错。但再导入基于新的CA根证书生成的服务器证书,就会报“java.lang.Exception: 无法从回复中建立链接”。
所以,解决问题的方法很简单,下载新的中级CA根证书,删除keystore里已经导入的原来的CA根证书,重新导入新的CA根证书,再导入服务器证书,就没问题了。
解决步骤如下(假设已经导入了旧的CA证书又没有备份原来的keystore):
1、删除旧的CA根证书,假设CA根证书导入时的别名是root。
keytool -delete -alias root -keystore c:\cert\keystore
2、到网站上找到新的CA根证书,COPY内容,PASTE到某个文件中,如 c:\cert\newroot.cer
3、添加新的CA根证书,假设新的CA根证书导入时的别名也为root(名字自定)。
keytool -import -alias root -keystore c:\cert\keystore -file c:\cert\newroot.cer
4、再次导入服务器证书,假设服务器别名是server,颁发的服务器证书贴在server.cer里。
keytool -import -alias server -keystore c:\cert\keystore -trustcacerts -file c:\cert\server.cer
以上步骤都需要输入证书密码,根据自己的实际情况更换证书所在的目录和文件名。
------------- 打完收工~