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