https证书到期会影响java请求么

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了https证书到期会影响java请求么相关的知识,希望对你有一定的参考价值。

参考技术A

在java代码中请求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

原因是没有证书。在浏览器中直接使用url访问是可以的,应该是浏览器之前就保存过对应的.cer证书。

解决方法有两种,从目标机器获得有效证书或者忽略证书信任问题。

一、获得目标机器有效证书

1、编译安装证书程序 javac InstallCert.java

2、运行安装证书程序生成证书

java InstallCert my.hoolai.com

例如:java InstalCert smtp.zhangsan.com:465 admin

如果不加参数password和host的端口号,上面的获取证书程序中默认给的端口号是:443,密码是:changeit



3、根据运行提示信息,输入1,回车,在当前目录下生成名为: jssecacerts 的证书

将证书放置到$JAVA_HOME/jre/lib/security目录下, 切记该JDK的jre是工程所用的环境!!!

或者:

System.setProperty("javax.net.ssl.trustStore", "你的jssecacerts证书路径");

可以更改密码,在security目录下运行命令

keytool -storepasswd -new xxxcom -keystore cacerts

就可以修改密码,修改后使用命令

keytool -list -v -keystore cacerts

查看文件的信息,会提示需要密码才能查看,如果输入密码与修改后的密码匹配,说明修改成功了。

PS:至此这种方式可以成功使用ssl了,另外再补充一下,根据刚才生成的文件jssecacerts,可以生成cer文件,

命令如下

keytool -export -alias xxx.com-1 -keystore jssecacerts -rfc -file xxx.cer

如上,之前的工具类中默认命名别名是加上"-1"。使用InstallCert设置的密码需要跟cacerts文件中的密码一致,

如果修改过密码,就需要修改InstallCert类中对应的密码字符串,否则会有下面这个异常:

java.security.UnrecoverableKeyException: Password verification failed

二、忽略证书信任问题

源码:http://mengyang.iteye.com/blog/575671

一定要注意需要在connection创建之前调用文章里所述的方法,像这个样子:

trustAllHttpsCertificates();

HostnameVerifier hv = new HostnameVerifier()

public boolean verify(String urlHostName, SSLSession session)

return true;



;

HttpsURLConnection.setDefaultHostnameVerifier(hv);

connection = (HttpURLConnection) url.openConnection();

好吧,两种方法都试过有效。

以上是关于https证书到期会影响java请求么的主要内容,如果未能解决你的问题,请参考以下文章

美政府关门导致大量政府网站HTTPS证书到期无法访问

如何在 Java 中以编程方式检查 SSL 证书到期日期

Java的HttpClient如何去支持无证书访问https

JMeter测试HTTPS请求

检测HTTPS证书到期时间

https证书价格多少?会影响价格的因素