2011-11-16 2 views
8

मैं एक आईपैड मेनफ्रेम (मुझे विश्वास है कि यह zSeries) से कनेक्ट करने के लिए एक विंडोज जावा 1.6.0_29-b11 वीएम में चल रहे अपाचे सीएक्सएफ क्लाइंट का उपयोग कर रहा हूं, और एक SOAP का आह्वान करना वहां चल रही वेब सेवा। कनेक्शन एसएसएल/टीएलएस के माध्यम से किया जाता है, और अधिकांश समय ठीक काम करता है।एसएसएल "खराब रिकॉर्ड मैक" अपवाद का निवारण कैसे करें

हालांकि, समय-समय पर मेरे पास bad record 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) 

दुर्भाग्यवश, मेरे पास सर्वर पर एंडपॉइंट को संशोधित या डिबग करने की संभावना नहीं है।

इसका कारण क्या हो सकता है?

मैं इस व्यवहार को कैसे अलग और ठीक कर सकता हूं? ,

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

यह शायद एसएसएल कार्यान्वयन और डेटा की मात्रा बहुत बड़ी हैं भेजा जा रहा है के साथ कुछ है:

+0

क्या यह किसी भी मौके से वायरलेस कनेक्शन पर है? –

+0

जावा और पोर्टग्रेएसक्यूएल के बीच ["खराब रिकॉर्ड मैक" एसएसएल त्रुटि का संभावित डुप्लिकेट] (http://stackoverflow.com/questions/2446292/bad-record-mac-ssl-error-between-java-and-portgresql) –

+0

यह एक फाइबर कनेक्शन है। हालांकि बहुत स्थिर नहीं है .. –

उत्तर

14

यदि आपको अपने नेटवर्क में कुछ गलती के कारण बहुत सारे खराब पैकेट मिल रहे हैं तो यह हो सकता है कि एक खराब पैकेट 32-बिट टीसीपी चेकसम से यादृच्छिक रूप से जीवित रहेगा। 4 बिलियन खराब पैकेट में से लगभग 1 टीसीपी द्वारा फिसल जाएगा। एक बार यह पैकेट एसएसएल को वितरित करने के बाद यह निश्चित रूप से खराब रिकॉर्ड मैक उत्पन्न करेगा, क्योंकि एसएसएल मैक आकार में 96 बिट्स है।

यदि ऐसा कारण है, तो एकमात्र समाधान नेटवर्क में सुधार होता है।

+0

क्या आप यह कह रहे हैं कि टीसीपी चेकसम ठीक है (इसलिए पैकेट को नेटवर्क स्टैक द्वारा स्वीकार किया जाता है), लेकिन डेटा अभी भी दूषित है? यह समझ में आता है .. –

+0

हां, बिल्कुल। चूंकि टीसीपी चेकसम केवल 32 बिट्स है, लगभग 2 में से 1 ** 32 खराब पैकेट्स में एक सही टीसीपी चेकसम होगा। तो यदि आपका नेटवर्क बहुत सारे खराब पैकेट उत्पन्न कर रहा है तो यह हो सकता है। –

10

यह जावा से संबंधित नहीं है, यह एक SSL/TLS विफलता है मुझे संदेह है कि यह यादृच्छिक है।

+2

हां, निश्चित रूप से यह यादृच्छिक नहीं है, यह सिर्फ * लगता है * मुझे यादृच्छिक है (मेरे पास इसे पुन: उत्पन्न करने का कोई तरीका नहीं है)। क्या ऐसा कुछ भी है जो मैं इसे और डीबग करने के लिए कर सकता हूं और यह जान सकता हूं कि इसका क्या कारण है? –