2011-11-16 21 views
8

Estoy utilizando un cliente Apache CXF, ejecutando en una máquina virtual Java de Windows 1.6.0_29-b11 para conectarme a un sistema principal IBM (creo que es zSeries), e invocando un SOAP Servicio web ejecutándose allí. La conexión se realiza a través de SSL/TLS, y la mayoría de las veces funciona bien.Cómo solucionar problemas de la excepción SSL "registro incorrecto de MAC"

Sin embargo, de vez en cuando tengo excepciones SSL con un mensaje bad record MAC. Aquí está la salida del programa usando con la propiedad 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) 

Desafortunadamente, no tengo posibilidades de modificar o depurar el punto final en el servidor.

¿Qué podría estar causando esto?

¿Cómo puedo aislar y corregir este comportamiento?

+0

¿se trata de una conexión inalámbrica por casualidad? –

+0

posible duplicado de ["error MAC de registro incorrecto" entre Java y PortgreSQL] (http://stackoverflow.com/questions/2446292/bad-record-mac-ssl-error-between-java-and-portgresql) –

+0

This es una conexión de fibra Aunque no es demasiado estable ... –

Respuesta

14

Si obtiene muchos paquetes incorrectos debido a algún error en su red, puede ocurrir que un paquete erróneo sobreviva al azar a la suma de comprobación TCP de 32 bits. Aproximadamente 1 de cada 4 mil millones de paquetes defectuosos se deslizarán por TCP. Una vez que este paquete se entregue a SSL, generará un registro incorrecto de MAC seguro, porque el Mac de SSL tiene un tamaño de 96 bits.

Si esta es la causa, la única solución es mejorar la red.

+0

¿Está dando a entender que la suma de comprobación de TCP está bien (por lo que el paquete es aceptado por la pila de red), pero los datos todavía están dañados? Esto tiene sentido. –

+0

Sí, exactamente. Debido a que la suma de comprobación TCP es de solo 32 bits, aproximadamente 1 en 2 ** 32 paquetes incorrectos tendrá una suma de comprobación TCP correcta. Entonces, si su red está generando muchos paquetes malos, esto puede suceder. –

10

Esto no está relacionado con Java, que es una conexión SSL/TLS fracaso:

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

Probablemente tiene algo que ver con la implementación de SSL y la cantidad de datos que se está enviando ser demasiado grande, Dudo que sea al azar.

+2

Sí, seguramente no es aleatorio, simplemente * parece * aleatorio para mí (no tengo forma de reproducirlo). ¿Hay algo que pueda hacer para depurarlo más y saber qué está causando esto exactamente? –

Cuestiones relacionadas