前言:最近公司b2b,b2c生产环境更换了http协议为https,随之而来就是所有内外部通讯通知,都要更换,所以有了这次https的调试。
注释:这里面Java https发送的代码就不展示了,网上也可以找到很多,如果有需要我可以后续粘贴出来。
第一次调试
语言:Java
环境:JDK1.7
启动服务,第一次发送带参数的POST的HTTPS 请求。
问题:提示SSLv3协议错误,服务器选择sslv3但是本地环境不支持。
为啥不支持SSLv3协议?这里我搜索了下相关问题。原来是SSLv3有安全漏洞,JDK1.7以后已经把SSLv3默认禁止了。
但是此时,我需要使用到SSLv3在已有的环境中怎么办?更换JDK试试?于是有了第二次调试。
第二次调试
语言:Java
环境:JDK1.6
因为项目是以JDK1.7环境开发的所以更换为1.6以后项目很多报错,所以只能以main函数的方式进行测试。
结果为通讯正常。终于通了,验证了这个问题。
**1.JDK1.6 SSLv3协议可以使用。
2.JDK1.7 因为安全问题应该是禁止或是移除了SSLv3协议。**
这样就有了眉目,如果JDK1.7是禁止了协议,应该会有方法找回来,如果是移除掉了就不好办了。
第三次调试
语言:Java
环境:JDK1.7
鉴于前两次的调试,有了些解决的思路。既然是安全问题使JDK1.6以后不能再使用SSLc3协议,那我就去看看JDK1.7的安全配置文件有没有线索。\jre\lib\security\java.security
打开java.security 文件,试着搜索一下SSLv3,结果查找出一条这样的信息。
jdk.tls.disabledAlgorithms=SSLv3
disabled禁止了SSLv3协议,尝试注掉这行配置。
#jdk.tls.disabledAlgorithms=SSLv3
再次运行,成功运行!这次https的调试终于暂时结束了。
ps:jdk里面会有两个文件夹jre的,以jdk1.7 为例,里面就有jre 和 jre7,修改配置文件只需要修改jre中的java.security 文件就可以。还有注掉这行配置可能有安全问题的隐患,我的这次调试只是有一个解决这个问题的思路。希望能有个更好的解决这个问题的方法。