Java PKIX SSL证书校验错误及解决方案
服务器上程序发起https请求时,有些时候会遇到下面的错误:
javax.net.ssl.SSLHandshakeException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
错误原因
分析下出现这个错误的原因基本都是:是没有导入中心仓域名的证书,ssl证书校验不通过。
解决方法
1. 直接忽略
使用以下命令直接忽略相关证书的校验
-Dmaven.wagon.http.ssl.insecure=true -Dmaven.wagon.http.ssl.allowall=true -Dmaven.wagon.http.ssl.ignore.validity.dates=true -Dmaven.resolver.transport=wagon
配置说明:
-Dmaven.wagon.http.ssl.insecure=true:启用对ssl验证的宽松检查。
-Dmaven.wagon.http.ssl.allowall=true:允许使用服务的带hostname 的X.509格式的证书。如果将参数改为false,那么就会使用长默认的浏览器证书检查。
-Dmaven.wagon.http.ssl.ignore.validity.dates=true:忽略整数中日期的检查。
-Dmaven.resolver.transport=wagon:在Maven3.9.0或者更高的版本中,默认的http调用已经切换到了Apache HttpClient 4。需要切换成旧的wagon组件,否则前面的三个参数不会生效
2. 导入证书
导入证书的命令为:
keytool -import -alias LL1 -keystore /usr/local/jdk1.8.0_112/jre/lib/security/cacerts/ -file /usr/local/jdk1.8.0_112/jre/lib/security/hnagroup.cer
证书需要自己准备