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?
¿se trata de una conexión inalámbrica por casualidad? –
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) –
This es una conexión de fibra Aunque no es demasiado estable ... –