天天看点

jdk1.7环境java代码访问https(connection reset)

问题描述:

jdk1.8环境java代码访问https服务(跳过证书)一切正常;

jdk1.7环境java代码访问https服务(自家的服务)connection reset, 

坚信代码没有问题,于是测试别人家的https服务,jdk1.7环境同样的代码访问正常,

于是继续测试代码,本地配置nginx(https)服务和tomcat(https)服务,jdk1.7环境同样

代码再次运行正常,于是更加坚信代码没有问题,肯定是自家生产环境配置的问题,限制了

协议(本人对协议也是一知半解);

生产环境配置排查:

产环境请求路径: elb(弹性负载均衡[https])->nginx(http)->tomcat(http)

排查流程,确认问题出在哪个环节:

同样的代码打包三份([1]直接访问tomcat服务,[2]访问nginx->tomcat服务, [3]访问elb->nginx->tomcat);

环境准备: jdk1.7环境,jdk1.8环境;

测试验证1(jdk1.7环境):

运行打包代码1、2、3,结果只有代码3报错,connection reset;

测试验证2(jdk1.8环境)

运行打包代码1、2、3,全部正常;

由此可推论出生产的配置不支持jdk1.7访问https,配置出在elb上面(https);

以上的环节只是为了更加确认问题出在哪个环节,结论更加令人信服;

问题解决:

排查生产elb配置,排查方向当然是SSL协议配置,最后果然如此,elb配置的SSL协议是默认的(TLSv1.2),

于是修改成支持多协议(TLSv1.2 TLSv1.1 TLSv1),问题解决(最后附上ssl配置的截图);听运维说jdk1.7对应的协议应该是TLSv1.1,

但是修改后还有TLSv1,无法验证jdk1.7对应的哪个协议;

以上结果不重要,排查的问题的方法很重要,排查的思路一定要清晰,大概确定问题的环节,才能有针对性的去排查,

排查过程很心酸,但是收货很大,也再次证明自己找bug的能力还是可以的!!!

注:本人对协议一知半解,甚至可以说不了解,但一样能解决协议存在的问题,只要相信自己,有毅力,什么事情都能解决的 !!

jdk1.7环境java代码访问https(connection reset)