web-dev-qa-db-fra.com

Échec de la prise de contact SSL - Java 1.8

Je tiens à informer les gens d'un problème que beaucoup semblaient avoir rencontré après la mise à niveau vers Java 1.8. Toutes les solutions ne sont pas les mêmes d'où la résolution de ce problème.

Mais d'abord… Ce n'est pas une solution digne des systèmes de production car la sécurité est en train d'être rétrogradée. Cependant, si vous êtes bloqué à des tests, etc., cela convient probablement.

Mon problème était que peu importe ce que je faisais ... activait SSLv3, etc. Je recevais toujours 

"javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure".

Voici les étapes que j'ai prises pour résoudre ce problème.

Tout d'abord, j'ai découvert le chiffrement utilisé par le serveur. Je l'ai fait via openssl.

openssl s_client -Host yourproblemhost.com -port 443

Cela cède (à la fin ...)

SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : RC4-MD5

Maintenant .. qu'utilisons-nous en Java pour activer ce chiffrement?

Lien Oracle

Dans ce lien, il contient les noms et leur contrepartie Java. Donc pour RC4-MD5, nous avons SSL_RSA_WITH_RC4_128_MD5.

oK bien. Maintenant, j'ai ajouté une propriété System.

-Dhttps.cipherSuites=SSL_RSA_WITH_RC4_128_MD5

Et dans mon code ...

Security.setProperty("jdk.tls.disabledAlgorithms", "" /*disabledAlgorithms */ );

Encore une fois .. il s’agit d’un «correctif» de dernier recours absolu ... Mais si vous vous cognez la tête contre un mur pour le faire fonctionner (pour les tests), j’espère que cela vous sera utile.

9
James

Avec JDK 1.8.0_51 release RC4 n'est plus pris en charge par Java en tant que client (également en tant que serveur) pour négocier une négociation SSL, RC4 est considéré comme un chiffrement faible (et compromis) et c’est la raison de la suppression.

http://bugs.Java.com/view_bug.do?bug_id=8076221

Vous pouvez toutefois l'activer en supprimant RC4 de jdk.tls.disabledAlgorithms de votre configuration de sécurité Java ou en les activant par programme à l'aide de la méthode setEnabledCipherSuites().

Cependant, une meilleure solution serait de mettre à jour la configuration du serveur (si elle est sous votre contrôle) pour passer à des chiffreurs plus puissants.

RC4 est maintenant considéré comme un chiffre compromis. Les suites de chiffrement RC4 ont été supprimées de la liste des suites de chiffrement activées par défaut du client et du serveur dans la mise en œuvre Oracle JSSE. Ces suites de chiffrement peuvent toujours être activées par les méthodes SSLEngine.setEnabledCipherSuites() et SSLSocket.setEnabledCipherSuites().

En ce qui concerne votre méthode de configuration à l'aide de Security.setProperty(), ce n'est pas une méthode fiable car les champs qui contiennent les algorithmes désactivés sont statiques et final . Ainsi, si cette classe est chargée en premier, vous n'avez pas le contrôle sur elle, vous pouvez Sinon, essayez en créant un fichier de propriétés

comme ça

## override it to remove RC4, in disabledcipher.properties
jdk.tls.disabledAlgorithms=DHE

et dans votre machine virtuelle Java, vous pouvez le référencer comme une propriété système comme celle-ci

Java -Djava.security.properties=disabledcipher.properties blah...
5
Jigar Joshi

RC4 était effectivement fissuré - il y a 14 ans .

L’attaque de Fluhrer, Mantin et Shamir (FMS), publiée dans leur 2001 Article "Faiblesses dans l’algorithme de planification clé de RC4", tire avantage de D’une L'algorithme de planification de clé RC4 pour Reconstruit la clé à partir de messages chiffrés.

Le problème ne concerne pas Java 8.

Le problème est que votre serveur utilise RC4.

1
Andrew Henle

Notez que la cause principale ici est le serveur. Je ne l'ai posté que pour fournir une solution jusqu'à ce que les serveurs (qui pourraient très bien être hors du contrôle du développeur) puissent être réparés

0
James