这两天发现服务器上使用httpclient访问https的网站时会抛出下面这个异常:
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:174)
查了一下,都说是证书没有导入导致的,可是以前使用是好的,只是最近某一天开始才出现这个问题。
其实这时候就应该想到是证书过期了,但是以前没接触过这类问题,所以还是继续查看日志。发现一批旧的机器才有问题,新机器却是好的。猜测是caserts的问题,在旧机器上指定 -Djavax.net.ssl.trustStore=cacerts-new 果然好了。
解决证书过期,直接的办法就是升级jre,如果条件不允许的话,直接使用最新的cacerts替换旧的就可以了。
cacerts文件在java安装目录的security目录里。 当然如果是证书不存在,就是另外一回事了,需要手工导入。