已解决Https请求报错:unable to find valid certification path to requested target
Posted up up!
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了已解决Https请求报错:unable to find valid certification path to requested target相关的知识,希望对你有一定的参考价值。
SSL认证失败:
-
报错信息如下:
sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
-
问题发现环境:
Java中使用了 HttpsURLConnection 去请求某资源,报此错误。 -
错误原因:
Java在访问SSL加密的网站时,需要从JDK的KeyStore 里面去查找相对应得可信证书,如果不能从默认或者指定的KeyStore 中找到可信证书,就会报这个错误。
另外,Java所使用的证书仓库并不是Windows系统自带的证书管理。所以即使系统中包含此证书也不可以使用。
解决这个问题的办法有两种:
一是在发起https连接之前将服务器证书加到httpclient的信任证书列表中,这个相对来说比较复杂一些,很容易出错。
另一种办法是让httpclient信任所有的服务器证书,这种办法相对来说简单很多,但安全性则差一些,但在某些场合下有一定的应用场景。 -
解决方式:将所访问的SSL站点证书添加至JVM。
echo -n |openssl s_client -connect xxx.xxx.xxx.xxx:xxxx|sed -ne'/BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > xxxxx.cert
此命令获取服务端证书链。
keytool -importcert -alias xxx.xxx.xxx.xxx -keystore $JAVA_HOME/jre/lib/security/cacerts -storepass changeit -file xxxxx.cert
此命令导入上述证书到JVM的证书库中。
如果JAVA_HOME环境变量未设置,需要预先设置。 如:update-alternatives --list
可以看到当前jdk的安装目录。如/usr/lib/java/jdk1.8.0_131
则可以通过export JAVA_HOME=/usr/lib/java/jdk1.8.0_131
来指定JAVA_HOME。
以上是关于已解决Https请求报错:unable to find valid certification path to requested target的主要内容,如果未能解决你的问题,请参考以下文章
已解决Https请求报错:unable to find valid certification path to requested target
org.springframework.context.ApplicationContextException Unable to start web server报错(已解决)
导入Cardboard SDK后Build到安卓平台出错:Unable to merge android manifests. (已解决)
已解决:SpringBoot启动报错:Unable to start web server; nested exception is org.springframework.boot.web
已解决E: Unable to locate package ros-kinetic-desktop-full
Java调用https服务报错unable to find valid certification path to requested target的解决方法