1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > unable to find valid certification path to requested target的异常解决办法

unable to find valid certification path to requested target的异常解决办法

时间:2021-04-30 10:37:39

相关推荐

unable to find valid certification path to requested target的异常解决办法

unable to find valid certification path to requested target的异常解决办法

一.异常现象

我在利用cas-overlay-template搭建单点登录服务器的时候,服务器正常启动起来,然后我又搭建了一个cas客户端,也配置好了与服务器的连接,结果我在浏览器访问客户端的api时,浏览器提示出现500异常。然后控制台提示信息如下:

java.lang.RuntimeException: .ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested targetat org.jasig.cas.monUtils.getResponseFromServer(CommonUtils.java:458) ~[cas-client-core-3.5.0.jar:3.5.0]at ......Caused by: .ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested targetat sun.security.ssl.Alerts.getSSLException(Alerts.java:192) ~[na:1.8.0_192]at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1946) ~[na:1.8.0_192]at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:316) ~[na:1.8.0_192]at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:310) ~[na:1.8.0_192]at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1639) ~[na:1.8.0_192]....Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested targetat sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:397) ~[na:1.8.0_192]at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:302) ~[na:1.8.0_192]at sun.security.validator.Validator.validate(Validator.java:262) ~[na:1.8.0_192]......Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested targetat sun.security.provider.certpath.SunCertPathBuilder.build(SunCertPathBuilder.java:141) ~[na:1.8.0_192]at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:126) ~[na:1.8.0_192]at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:280) ~[na:1.8.0_192]at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:392) ~[na:1.8.0_192]... 81 common frames omitted

导致异常的直接原因是:

Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target。

但是根本的异常是.ssl.SSLHandshakeException,这个异常其实是因为cas客户端与cas服务器在进行通信时,https协议需要导入SSL认证证书,我们本地开发时,用的是自制的认证证书,这个自制的认证证书会影响我们开发测试。

二.解决办法

解决该问题,总体上来说有2种方式:

①.创建认证证书并导入证书到本地cacerts库中;

②.取消证书认证,信任所有请求链接。

解决方式一:导入证书到本地cacerts库中

1.创建密钥库

利用jdk自带的keytool工具,就可以制作本地密钥库,命令如下:

keytool -genkey -alias casserver -keyalg RSA -keystore F:\cas.keystore

通过以上命令,我们就创建了一个别名为 casserver 的密钥库,并把该密钥库存储到了F盘下,密钥库文件名称为cas.keystore。

2.导出生成认证证书

keytool -export -trustcacerts -alias casserver -file F:\cas.cer -keystore F:\cas.keystore

通过以上命令,我们把本地密钥库导出了一个名为cas.cer的认证证书。

3.导入认证证书到cacerts本地库中

keytool -import -trustcacerts -alias casserver -file F:\cas.cer -keystore "C:\Program Files (x86)\Java\jdk1.8.0_192\jre\lib\security\cacerts"

这样我们就把别名叫做 “casserver” 的cas.cer认证证书,导入到了"C:\Program Files (x86)\Java\jdk1.8.0_192\jre\lib\security\cacerts"的本地证书库中。注意密钥库cacerts的默认口令是changeit

然后再重新访问客户端,就可以实现与cas服务端的认证通信了。

当我们在浏览器中访问cas客户端中的api,比如http://cas.:8080/user时,会重定向到如下cas服务端认证界面:

当认证通过后,才会进入到cas客户端界面中,如下图所示:

解决方式二:取消证书认证,信任所有请求链接

我们可以为maven添加如下属性:

maven.wagon.http.ssl.insecure=true

在mvn命令后面加上-Dmaven.wagon.http.ssl.insecure=true,此属性是让maven忽略安全性,不再校验服务器的证书(此时服务器的证书可能是被替换的),完整配置如下:

mvn -Dmaven.wagon.http.ssl.insecure=true package

但是在我的环境中,经过测试,发现本方式并不好使。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。