Ho un'applicazione che si connette a un servizio Web remoto distribuito su HTTPS. La nostra applicazione utilizza FIPS-140 Level-1 per la connettività SSL / TLS e si basa sui fornitori JCE di RSA (la società).
com.rsa.jsse.JsseProvider.JsseProvider()
RsaJsse version 6.14
com.rsa.jsafe.provider.JsafeJCE.JsafeJCE()
JsafeJCE version 6.11
Recentemente il team del servizio web ha apportato modifiche alla loro fine per abilitare i codici DH. Dopo questa modifica, il codice che viene selezionato per SSL è TLS_DHE_RSA_WITH_AES_256_GCM_SHA384. Tuttavia, la convalida della catena di certificati sembra non riuscire con l'eccezione seguente:
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)
Qualcuno può guidarmi per favore qual è il significato di "Tipo di autenticazione non valido: DHE_RSA"? Prima dell'abilitazione di DH Cipher nel webservice back-end, questo tipo di autenticazione era "RSA" e non abbiamo mai riscontrato problemi.
Ho letto nei commenti di questa domanda che questo errore può venire se l'algoritmo non è approvato FIPS-140. Può essere il caso qui?
Si noti che il metodo com.example.MyX509TrustManager.checkServerTrusted
non fa nulla di speciale - è scritto per saltare la convalida della catena di certificati in alcuni casi speciali, altrimenti delegherà a java.net.ssl.TrustManager#checkClientTrusted
- in questo caso TrustManager è un'istanza di una classe RSA il cui nome è offuscato nei vasi RSA.
UPDATE:
Sembra che com.rsa.sslj.x.cj.checkClientTrusted
si aspetti che l'algoritmo utilizzato nella chiave pubblica sia DHE_RSA
, poiché l'algoritmo utilizzato nella catena di certificati del servizio Web remoto è RSA
- riporta un errore che dice Invalid authentication type
. Il team di servizio web remoto ha recentemente aggiunto dhparam alla configurazione SSL per evitare la vulnerabilità di logjam , ma non ha apportato alcuna modifica al certificato. Non sono sicuro del motivo per cui il nostro client SSL ha iniziato a non riuscire a connettersi al servizio remoto da allora, e c'è qualcosa che devo fare perché la nostra applicazione o il team dei servizi web remoti abbiano bisogno di qualcosa. Qualsiasi input a questo riguardo sarà molto utile