2014-04-14 63 views
1

我正嘗試將Java Axis2客戶端從Websphere6/JRE1.5.x遷移到Solaris上的Tomcat 7.0.42/JRE1.6.x。在這個過程中,我遇到了一個問題,即客戶端可以通過https第一次與web服務進行通信,但是由於ssl錯誤而從第二次嘗試開始就會失敗。Axis2客戶端無法在Tomcat 7.0.42上啓動第二個https呼叫

從日誌中的失敗嘗試中提取表明 -

%%客戶端緩存[會議-1,SSL_RSA_WITH_RC4_128_MD5]
%%嘗試從端口恢復[會議-1,SSL_RSA_WITH_RC4_128_MD5] 34092
* *的ClientHello,使用TLSv1
...
線程606,WRITE:使用TLSv1握手,長度= 179
線程606,READ:使用TLSv1異動,>長度= 2
線程606,RECV的TLSv1警告:致命,unexpected_message

和實際的例外是(我懷疑這是由於沒有開放式插槽) -

產生的原因:javax.net.ssl中。異常SSLException:收到致命警報: unexpected_message在 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(Unknown Source) at com.sun.net.ssl.internal.ssl.AppOutputStream.write(Unknown Source) at java.io.BufferedOutputStream.flushBuffer(Unknown Source)在 java.io.BufferedOutputStream.write(來源不明)處 org.apache.commons.httpclient.WireLogOutputStream.write(WireLogOutputStream.java:86) java.io.FilterOutputStream.write(來源不明)在 組織.apache.axis2.tra nsport.http.AxisRequestEntity.writeRequest(AxisRequestEntity.java:89)

比較這對WebSphere環境的日誌,我已經找到了一些差異,因此我的問題 -

  1. 是Tomcat上的SSL配置會影響調用不同服務器的Axis2客戶端的行爲?或者,我的問題更多在操作系統級別?

  2. 關於舊環境,我注意到不止一個ssl會話被緩存了。當一次會話恢復失敗時,它只是嘗試使用不同的會話並繼續通話。然而,在新的服務器上,我只見過一個會話被創建並被緩存。恢復時,它一直試圖在不同的端口恢復相同的會話,但保持失敗。因爲這是唯一的會議,所以如果不能嘗試不同的會議,也不能創建新的會話。我的問題是爲什麼只有一個會話創建,並且它是一個配置問題,以啓用緩存多個會話?

任何幫助/指針非常感謝。

回答

0

終於找到了故障。以爲我會在這裏分享給任何可能遇到類似問題的人。 事實證明,它與JRE本身的安全提供程序有關。下面是關於如何配置它的鏈接 - 這似乎在Solaris上的默認安全提供商是造成怪異的行爲,我看到
http://pic.dhe.ibm.com/infocenter/ssp/v3r4/index.jsp?topic=%2Fcom.ibm.help.sspreleasenotes.doc%2FSSP_RN_RemovePKCS11SecurityProvider.html

。遵循鏈接中的指令並使用Java默認提供程序,解決了我所看到的ssl問題。