问题
在一个Java系统中,有通过代码调用外部系统的Https功能,外部系统因为换了https证书,导致我们的系统报了
java.io.IOException: Invoke WSHTTP failed, caused by:peer not authenticated
这个错误。
原因
错误的原因是因为此证书不受信任,这就像我们用浏览器访问某个 https网站一样,如果证书不被信任就会报错,但我们可以忽略报错或者手工添加信任。
于是搜索了一些解决方案,居然发现大多数都在想办法不校验证书,个人觉得这是在走一条错误的路。
解决方案
比较靠谱且正式点的方案是将这个证书添加为信任,所幸并不困难,只需执行以下几步:
1. 找到系统的JVM的安装目录
2. 上传要信任的证书到系统所在的机器上
3. 执行命令:sudo keytool -importcert -alias "证书别名" -file /xx/xx/xxxxx.crt -keystore /xx/xx/jre/lib/security/cacerts -storepass changeit
第一处红字,就是随便起个别名,第二处红字是证书所在路径,第三处红字是jvm的目录
4. 执行上述命令的过程中会提示“是否信任此证书”,信任即可
然后就结束了,开心的测试吧~