调试项目时,出现以下异常: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
原因是通过Java请求对应的URL时,是基于https协议的请求,客户端没有对应的信任证书,因此无法与服务器建立安全链接。需要做的是获取网站证书,并添加到JDK信任列表!
获取网站证书
有两种方式获取网站证书,一种是利用一段自动下载证书的代码,另外一种是利用浏览器下载证书。
1 | /* |
将以上代码拷贝到InstallCert.java文件中
1 | # javac ./InstallCert |
url为需要导出证书的网址,导出完成后,证书文件将存在InstallCert.java同级目录中
利用浏览器导出
点击浏览器网址栏左侧的小锁头(话说绿色的锁头,让人看着就有安全感)
点击红圈里面的View certificate
按钮
按照图中步骤进行操作
上面两种方法完成后,均会生成一个证书文件,将生成的证书文件移动到$JAVA_HOME/jre/lib/security
目录下
利用keytool,使JDK信任该证书
打开命令提示符窗口,输入下面的命令。
注:
证书文件代表上一步获得的证书的完整路径+证书文件名,即”path/filename”1
keytool -import -noprompt -trustcacerts -alias CTSite -file 证书文件 -keystore $JAVA_HOME/jre/lib/security/cacerts
执行后,提示输入密码,keytool的默认密码为changeit
或changeme
,如果你没有修改过密码,肯定是二者中的一个!