Comment faire pour résoudre les SSL “mauvaise tenue de MAC” exception

Je suis en utilisant un Apache CXF client, en cours d'exécution dans Windows Java 1.6.0_29-b11 VM pour se connecter à un mainframe IBM (je crois que c'est zSeries), et l'invocation d'un Service Web SOAP fonctionne là-bas. La connexion se fait via le protocole SSL/TLS, et la plupart du temps fonctionne très bien.

Cependant, de temps en temps, j'ai SSL Exceptions avec un bad record MAC message. Voici la sortie du programme d'aide à la javax.net.debug propriété.

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)

Malheureusement, je n'ai pas de possibilités de modifier ou de débogage de l'extrémité au serveur.

Ce qui pourrait être la cause?

Comment puis-je isoler et de résoudre ce problème?

est-ce via une connexion sans fil par hasard?
double possible de "mauvaise tenue de MAC" erreur SSL entre Java et PortgreSQL
C'est une connexion en fibre. Bien que n'est pas trop stable..
Cela pourrait s'expliquer facilement si vous remarquez d'environ 4 milliards d'échec TCP sommes par mauvaise tenue de mac erreur.
Je pense que la raison la plus probable pour ceci est la suivante bug de Java: bugs.openjdk.java.net/browse/JDK-4615819 (ses dix ans mais n'a jamais été fixe sur le côté client)

OriginalL'auteur Camilo Díaz Repka | 2011-11-16

Leave a Reply

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *