SSL证书链不完整

java1.7程序连接https报错如下(1.8正常,但不保证访问其它https正常):
错误:sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

1. 原因分析
jdk版本太老或目标服务器的中间证书颁发机构不在 Java 内置信任证书之内,中间链证书缺失,导致 Java 无法构建完整的证书链

检查证书链是否完整:
openssl s_client -connect 域名:443 -showcerts

正确的证书链 应包含:
服务器证书
中间证书(Intermediate CA)
根证书(Root CA)(可选,客户端系统内置,但对老版jdk可能没有,就需要加上

#查看java内置CA证书
keytool -list -keystore $JAVA_HOME/jre/lib/security/cacerts -storepass changeit | grep jdk | awk '{print $1}'
java1.7以前缺少部分ca, 1.8以后基本都有。

检查下载的SSL证书pem文件中,通常有2个 BEGIN CERTIFICATE ,
pem文件里第一个是域名证书,第二个是中间链证书,对于老系统内置缺少新的中间链证书,才需要手动在pem文件下方补充中间链证书

1.下载中间链证书:https://myssl.com
工具箱->证书链下载
输入对应的域名获取证书链,替换原来的pem文件或直接在pem原内容下方补充中间链证书和ca证书

2. 另一个在线工具检查
SSL Labs (Qualys SSL Test)
访问: https://www.ssllabs.com/ssltest/
输入域名,查看 "Certification Paths" 部分:
绿色勾选:表示证书链完整。
红色警告:表示缺少中间证书。

3.  另一个在线检查工具:
https://www.sslshopper.com/ssl-checker.html
一般不会出现这种问题,老的java包如:1.6或1.7 可能出现。如果出现新的中间商,1.8也有可能出现,所以先保证有中间证书,如果中间证书还不行就把根证书也加上。

 

posted @   莫让年华付水流  阅读(25)  评论(0)    收藏  举报
努力加载评论中...
点击右上角即可分享
微信分享提示