Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1179193
  • 博文数量: 259
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 2518
  • 用 户 组: 普通用户
  • 注册时间: 2012-10-13 16:12
个人简介

科技改变世界,技术改变人生。

文章分类

全部博文(259)

分类: Java

2015-11-14 10:07:44

近期调试接口,出现一个很奇怪的问题,先说下环境:

服务器端
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

没有具体研究为什么高版本就报错的问题,我猜测是高版本去除了某个安全协议,导致通信失败,具体的需要看源码内容了。

特此记录下,帮助需要的朋友。
阅读(6281) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~