近期调试接口,出现一个很奇怪的问题,先说下环境:
服务器端
tomcat7 + jdk1.6 (64位)
业务代码使用jdk1.7开发的,使用jdk1.6版本编译,
客户端
使用jdk1.7开发,使用jdk1.7,连接服务器https,通信正常。
使用jdk1.6,连接服务器https,通信报错。
tomcat 7和6用过了
服务器端jdk 1.6 1.7都用过,openjdk1.6 1.7也试过了
客户端jdk1.7 1.8 通信成功 1.6报错
https证书 jdk1.7和1.6都生成测试过了
报错:
javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:174)
at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:136)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.recvAlert(SSLSocketImpl.java:1822)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1004)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1188)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:654)
at com.sun.net.ssl.internal.ssl.AppOutputStream.write(AppOutputStream.java:100)
at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:65)
at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:123)
at org.apache.commons.httpclient.methods.StringRequestEntity.writeRequest(StringRequestEntity.java:146)
at org.apache.commons.httpclient.methods.EntityEnclosingMethod.writeRequestBody(EntityEnclosingMethod.java:499)
at org.apache.commons.httpclient.HttpMethodBase.writeRequest(HttpMethodBase.java:2114)
at org.apache.commons.httpclient.HttpMethodBase.execute(HttpMethodBase.java:1096)
at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:398)
at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:171)
at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:397)
at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:323)
at Test.main(Test.java:52)
tomcat https配置
clientAuth="false" sslProtocol="TLS" keystoreFile="tomcat.keystore" keystorePass="123456" />
tomcat.keystore生成的命令
keytool -v -genkey -alias tomcat -keyalg RSA -keystore /root/tomcat.keystore
网上无限的百度、必应,查找问题,
java服务器端、客户端代码修改,以无计可施。
就在大家一愁未展的时候,无意中发现了这个提问,
提问地址:
这个意思是之前tomcat 7.0.22正常,仅仅升级下tomcat版本小版本就不行了,抱着试试的想法,重新更换tomcat版本,将目前的tomcat7.0.46版本更换为tomcat 7.0.22
配置、启动、访问、成功!
降低了版本反倒正常通信了。
后来测试使用apache-tomcat-7.0.10也成功了!
成功的环境:
服务端jdk1.7、tomcat7.0.10、tomcat.keystore是jdk1.6.45生成的(没有试jdk1.7生成的)
客户端jdk1.6
没有具体研究为什么高版本就报错的问题,我猜测是高版本去除了某个安全协议,导致通信失败,具体的需要看源码内容了。
特此记录下,帮助需要的朋友。
阅读(6386) | 评论(0) | 转发(0) |