java 输出ssl握手信息_如何解决Windows系统Java代码出现的SSL握手异常?

一、异常现象

利用java代码向某个https地址发送请求的时候,出现如下异常:

javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed Error

二、问题定位

根据异常信息初步判断为https证书缺失,为了验证判断的正确性,可以进入%JAVA_HOME%/bin目录,打开windows命令行窗口,执行如下命令:

keytool -list -keystore "../jre/lib/security/cacerts"

点击Enter键跳过密码,查看已经存在的证书列表。结果显示,我们请求https地址的证书的确不在列表中

三、解决方案

第一步,我们需要下载该证书。可以通过谷歌浏览器访问我们想要的https地址,然后点击地址栏前面的红色警告,查看站点信息,点击证书,选择详细,点击拷贝证书到文件,下一步

选择Base-64 encoded X.509格式,下一步,点击浏览按钮,任意选择一个目录,我们这里为了方便,指定到%JAVA_HOME%/bin目录,输入证书名称xxx.cer

第二步,运行下面的命令行,将证书添加到证书列表中

keytool -import -noprompt -trustcacerts -alias -file -keystore -storepass

说明:

: 我们的证书名称为xxx.cer, 这里可以使用xxx作为别名

:可以使用证书的绝对路径也可以使用相对路径,比如我们这里为./xxx.cer

:keystore文件,我们这里使用相对路径,../jre/lib/security/cacerts

:java默认changeit

第三步,我们可以再运行 keytool -list -keystore "../jre/lib/security/cacerts" 命令检查我们的证书是否成功添加到了证书列表。

你可能感兴趣的:(java,输出ssl握手信息)