Tengo una aplicación que se conecta a un servicio web remoto implementado en HTTPS. Nuestra aplicación utiliza FIPS-140 Level-1 para conectividad SSL / TLS, y se basa en los proveedores de JCE de RSA (la compañía).
com.rsa.jsse.JsseProvider.JsseProvider()
RsaJsse version 6.14
com.rsa.jsafe.provider.JsafeJCE.JsafeJCE()
JsafeJCE version 6.11
Recientemente, el equipo del servicio web realizó cambios en su extremo para habilitar los cifrados DH. Después de ese cambio, el cifrado que se selecciona para SSL es TLS_DHE_RSA_WITH_AES_256_GCM_SHA384. Sin embargo, la validación de la cadena de certificados parece fallar con la siguiente excepción:
java.lang.IllegalArgumentException: Invalid authentication type: DHE_RSA
at com.rsa.sslj.x.cj.checkClientTrusted(Unknown Source)
at com.example.MyX509TrustManager.checkServerTrusted(ReloadableX509TrustManager.java:65)
at com.rsa.sslj.x.aE.a(Unknown Source)
at com.rsa.sslj.x.bg.a(Unknown Source)
at com.rsa.sslj.x.bg.a(Unknown Source)
at com.rsa.sslj.x.bg.a(Unknown Source)
at com.rsa.sslj.x.aH.a(Unknown Source)
at com.rsa.sslj.x.aH.a(Unknown Source)
at com.rsa.sslj.x.ap.c(Unknown Source)
at com.rsa.sslj.x.ap.a(Unknown Source)
at com.rsa.sslj.x.ap.j(Unknown Source)
at com.rsa.sslj.x.ap.i(Unknown Source)
at com.rsa.sslj.x.ap.h(Unknown Source)
at com.rsa.sslj.x.aS.startHandshake(Unknown Source)
at org.apache.http.conn.ssl.SSLConnectionSocketFactory.connectSocket(SSLConnectionSocketFactory.java:261)
at org.apache.http.impl.conn.HttpClientConnectionOperator.connect(HttpClientConnectionOperator.java:118)
¿Alguien puede guiarme, por favor, cuál es el significado de "Tipo de autenticación no válido: DHE_RSA"? Antes de la habilitación de cifrado DH en el servicio web de back-end, este tipo de autenticación solía ser "RSA", y nunca tuvimos ningún problema.
Leí en los comentarios de esta pregunta que este error puede venir si el algoritmo no está aprobado por FIPS-140. ¿Puede ser el caso aquí?
Tenga en cuenta que el método com.example.MyX509TrustManager.checkServerTrusted
no hace nada especial: está escrito para omitir la validación de la cadena de certificados en ciertos casos especiales; de lo contrario, delegará en java.net.ssl.TrustManager#checkClientTrusted
. En este caso, TrustManager es una instancia de una clase RSA cuyo nombre Está ofuscado en los tarros RSA.
ACTUALIZAR :
Parece que com.rsa.sslj.x.cj.checkClientTrusted
espera que el algoritmo utilizado en la clave pública sea DHE_RSA
, ya que el algoritmo utilizado en la cadena de certificados del servicio web remoto es RSA
; informa de un error que dice Invalid authentication type
. El equipo de servicio web remoto había agregado recientemente dhparam a su configuración SSL a evitar la vulnerabilidad de logjam , pero no han realizado ningún cambio en su certificado. No estoy seguro de por qué nuestro cliente SSL comenzó a fallar en la conexión con el servicio remoto desde entonces, y ¿hay algo que deba hacer para que nuestra aplicación o el equipo de servicios web remotos necesite algo? Cualquier entrada en este sentido será de gran ayuda