jdk1.7版本访问对方https服务报如下错误。
javax.net.ssl.SSLException: Received fatal alert: protocol_version
根据wireshak抓包分析,发现我们和服务端发送请求的协议是SSLv3,而对方只支持TLS1.1以上版本。
于是我根据网上搜索的资料,在Java代码中添加如下代码:
System.setProperty("https.protocols", "TLSv1.2,TLSv1.1,TLSv1,SSLv3");
发现此参数设置并没有生效
于是分析了apachehttpclient jar包的源码发现 需要调用
HttpClientBuilder类中的
useSystemProperties()方法 他才会根据所设置的参数去创建连接。
然后再次抓包,发现发过去的请求协议为TLSv1.2。此方案可行!