2011-11-16 65 views
8

IBMメインフレームに接続するためのWindows Java 1.6.0_29-b11 VMで動作するApache CXFクライアントを使用しています(これはzSeriesだと思います)。SOAPそこで実行されているWebサービス。接続はSSL/TLSを介して行われ、ほとんどの場合正常に動作します。SSL「不良レコードMAC」例外のトラブルシューティング方法

しかし、時々私は​​メッセージでSSL例外を持っています。以下は、javax.net.debugプロパティを使用したプログラムの出力です。

2011-11-16 12:32:37,731 INFO LoggingOutInterceptor: Outbound Message 
--------------------------- 
ID: 29 
Address: https://1.2.3.4/access/servlet/blabla.atk123 
Encoding: UTF-8 
Content-Type: text/xml 
Headers: {Accept=[*/*], SOAPAction=["Blablaaction/ATK123.Execute"]} 
Payload: <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><ATK123.Execute xmlns="Blabla"><Usrid>WA</Usrid><Usrpwd>54321</Usrpwd><Ultautid>9999</Ultautid></ATK123.Execute></soap:Body></soap:Envelope> 
-------------------------------------- 
pool-1-thread-1, setSoTimeout(30000) called 
pool-1-thread-1, WRITE: TLSv1 Application Data, length = 321 
pool-1-thread-1, WRITE: TLSv1 Application Data, length = 262 
pool-1-thread-1, READ: TLSv1 Application Data, length = 483 
pool-1-thread-1, READ: TLSv1 Application Data, length = 16148 
pool-1-thread-1, READ: TLSv1 Application Data, length = 282 
%% Invalidated: [Session-1, SSL_RSA_WITH_RC4_128_SHA] 
pool-1-thread-1, SEND TLSv1 ALERT: fatal, description = bad_record_mac 
pool-1-thread-1, WRITE: TLSv1 Alert, length = 22 
pool-1-thread-1, called closeSocket() 
pool-1-thread-1, handling exception: javax.net.ssl.SSLException: bad record MAC 
2011-11-16 12:32:38,511 WARN PhaseInterceptorChain: Interceptor for {Blabla}ATK123#{Blabla}Execute has thrown exception, unwinding now 
org.apache.cxf.interceptor.Fault: bad record MAC 
    at org.apache.cxf.interceptor.LoggingInInterceptor.logging(LoggingInInterceptor.java:144) 
    at org.apache.cxf.interceptor.LoggingInInterceptor.handleMessage(LoggingInInterceptor.java:73) 
    at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:263) 
    at org.apache.cxf.endpoint.ClientImpl.onMessage(ClientImpl.java:797) 
.... (more stuff) 

残念ながら、サーバーでエンドポイントを変更またはデバッグすることはできません。

この原因は何ですか?

この動作をどのように分離して修正できますか? 、それはおそらくSSLの実装と大きすぎること送信されるデータの量とは何かを持っている

 
20 Bad record MAC fatal Possibly a bad SSL implementation, or payload 
          has been tampered with e.g. FTP firewall rule 
          on FTPS server. 

:これはJavaに関連していない

+0

これは何時でも無線接続でですか? –

+0

["JavaとPortgreSQLの間の"不正なレコードMAC "SSLエラー]の重複が可能です。(http://stackoverflow.com/questions/2446292/bad-record-mac-ssl-error-between-java-and-portgresql) –

+0

これはファイバー接続です。あなたがあまりにも安定していません.. –

答えて

14

ネットワークで何らかの障害が発生したために多くの不良パケットが発生した場合は、32ビットTCPチェックサムに悪いパケットがランダムに残ってしまうことがあります。 40億個の不良パケットのうち約1個がTCPによってスリップします。このパケットがSSLに配信されると、SSL Macのサイズが96ビットなので、間違ったレコードMACが生成されます。

これが原因である場合、唯一の解決策はネットワークを改善することです。

+0

TCPチェックサムがOKであることを意味しています(パケットはネットワークスタックによって受け入れられます)が、データはまだ破損していますか?これは意味をなさない.. –

+0

はい、まさに。 TCPチェックサムは32ビットのみであるため、2×32個の不良パケットに約1が正しいTCPチェックサムを持ちます。あなたのネットワークが多くの不良パケットを生成している場合、これが起こる可能性があります。 –

10

、それがSSL/TLS失敗です私はそれがランダムであることを疑う。

+2

はい、確かにそれはランダムではありません、それはちょうど私にとってはランダムなようです(私はそれを再現する方法がありません)。それをさらにデバッグし、これを正確に引き起こしていることを知るために私ができることは何ですか? –

関連する問題