jdk7+https+digest认证失败的问题排查

问题描述:

    服务端使用lighttpd提供服务,配置了digest认证方式+https. 之前使用jdk6+httpcomponent进行调用,访问正常响应,后来jdk升级到jdk7版本,原来正常的请求返回了400错误.HTTP/1.0 400 Bad Request,

 

排查过程:

    1.分别使用jdk6,jdk7,jdk8编写测试用例进行测试

    结果:除了jdk6返回正常以外,其他版本都是400错误

    2.使用jdk7,分别单独测试https和digest认证

    结果:200

    经过以上2组测试,基本可以锁定问题出现在jdk7+https+digest的场景

 

    3.使用chrome浏览器进行测试,发现依然是400错误

    根据返回的tls相关信息,观察到lighttpd使用了TLS1.0版本,对比主流网站,使用的是TLS1.2版本

 

 

锁定问题:

lighttpd使用版本TLS1.0,与jdk7实现TLS1.2版本,在某些场景下不兼容所导致。

 

 

解决方案:

    1.升级lighttpd使用的TLS版本到1.2

    2.在httpclient段,设置http proxy,调用是成功的!揣测为保证TLS版本的兼容,client/proxy/server均使用了TLS1.0进行交互。

 

参考资料:

    https://blogs.oracle.com/java-platform-group/entry/java_8_will_use_tls

    http://bugs.java.com/bugdatabase/view_bug.do?bug_id=6687282

    http://mail.openjdk.java.net/pipermail/net-dev/2008-April/000209.html

    http://blog.163.com/hlz_2599/blog/static/1423784742013415101252410/

    http://blog.itpub.net/15480802/viewspace-1340982/

 

你可能感兴趣的:(https)