jdk1.7支持TLS设置及URLConnection的使用

今天写图片下载功能代码,主要功能是将服务器上的图片下载保存,在访问服务器端时,由于是使用的HttpsConnection,结果在conn=url.openconnection()后,用conn.getInputStream()时,出现了异常

jdk1.7支持TLS设置及URLConnection的使用

握手失败?一看应该是网络连接问题,上百度查了一下,发现资源还是很多的,主要原因,JDK1.7与JDK1.8的SSL协议兼容问题,我本机是1.7,服务器是1.8

JDK1.7默认使用TLSv1.0,1.8默认使用TLSv1.2,但其实1.7是支持TLS1.2的,只不过没有默认启用,网上说可以设置jvm,我又找到对应jdk安装路径下jre/bin/javacpl.exe(有些开发人员电脑上可能装了好几个jdk版本,要找对应的),

jdk1.7支持TLS设置及URLConnection的使用

 

打开设置了一下,没毛用。没办法只能从代码上想办法解决了。

方案一、直接升级成jdk.1.8试了一下,代码不用改,确实可以;

 

方案二、参考了以下两篇文件,修改代码后就可以了

https://stackoverflow.com/questions/30121510/java-httpsurlconnection-and-tls-1-2

http://www.hackerav.com/?post=22119

 

jdk1.7支持TLS设置及URLConnection的使用

 

另外补充一点:

URLConnection是HttpURLConnection、HttpsURLConnection的父类,可能有些人在用url.openconnection()时,都是用父类声明变量赋值的,但是要注意只有HttpsURLConnection才有.setSSLSocketFactory()方法,http是没有的。当然http请求也用不到。所以大家可能要根据请求类型判断一下,创建不同的connection了。