【发布时间】:2014-04-14 05:44:18
【问题描述】:
我正在尝试将 Java Axis2 客户端从 Websphere6/JRE1.5.x 迁移到 Solaris 上的 Tomcat 7.0.42/JRE1.6.x。在这个过程中,我遇到了一个问题,客户端第一次可以通过 https 与 web 服务通信,但由于 ssl 错误,从第二次尝试开始就会失败。
从显示的失败尝试日志中提取 -
%% 客户端缓存 [Session-1, SSL_RSA_WITH_RC4_128_MD5]
%% 尝试从端口 34092 恢复 [Session-1, SSL_RSA_WITH_RC4_128_MD5]
** ClientHello, TLSv1
...
线程 606,写入:TLSv1 握手,长度 = 179
线程 606,阅读:TLSv1 警报,> 长度 = 2
Thread-606,RECV TLSv1 ALERT:致命的,unexpected_message
实际的异常是(我怀疑是由于没有打开的套接字)-
原因:javax.net.ssl.SSLException:收到致命警报: 意外消息在 com.sun.net.ssl.internal.ssl.Alerts.getSSLException(未知来源)
在 com.sun.net.ssl.internal.ssl.Alerts.getSSLException(未知 来源)在 com.sun.net.ssl.internal.ssl.SSLSocketImpl.recvAlert(未知来源)
在 com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(未知 来源)在 com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(未知 来源)在 com.sun.net.ssl.internal.ssl.SSLSocketImpl.writeRecord(未知来源) 在 com.sun.net.ssl.internal.ssl.AppOutputStream.write(未知来源) 在 java.io.BufferedOutputStream.flushBuffer(Unknown Source) 在 java.io.BufferedOutputStream.write(Unknown Source) at java.io.FilterOutputStream.write(Unknown Source) 在 org.apache.commons.httpclient.WireLogOutputStream.write(WireLogOutputStream.java:86) 在 org.apache.axis2.transport.http.AxisRequestEntity.writeRequest(AxisRequestEntity.java:89)
将此与 Websphere 环境中的日志进行比较,我发现了一些差异,因此我提出了一些问题 -
Tomcat 上的 SSL 配置是否会影响 Axis2 客户端调用不同服务器的行为?还是我的问题更多是在操作系统级别?
在旧环境中,我注意到缓存了多个 ssl 会话。当恢复在一个会话上失败时,它只是尝试使用另一个会话并继续通话。然而,在新服务器上,我只看到一个会话被创建并被缓存。恢复时,它一直试图在不同的端口恢复相同的会话,但一直失败。因为它是唯一的会话,如果不能尝试不同的会话,也不能创建新的会话。我的问题是为什么只创建一个会话,启用多个会话的缓存是否是配置问题?
非常感谢任何帮助/指针。
【问题讨论】:
标签: java ssl tomcat7 axis2 axis