Java 7 désactive TLS 1.1 et 1.2 pour les clients. De la Java Cryptography Architecture Oracle Providers Documentation :
Bien que SunJSSE dans la version Java SE 7 prenne en charge TLS 1.1 et TLS 1.2, aucune version n'est activée par défaut pour les connexions client. Certains serveurs n'implémentent pas correctement la compatibilité en aval et refusent de parler aux clients TLS 1.1 ou TLS 1.2. Pour assurer l'interopérabilité, SunJSSE n'active pas TLS 1.1 ou TLS 1.2 par défaut pour les connexions client.
Je suis intéressé par l'activation des protocoles sur un paramètre global (peut-être via un fichier de configuration), et non par une solution par application Java.
Comment activer de manière administrative TLS 1.1 et 1.2 à l'échelle du système ?
Remarque : depuis POODLE, je souhaite désactiver de manière administrative le système SSLv3. (Les problèmes liés à SSLv3 datent d'au moins 15 ans avant POODLE, mais Java / Oracle / Les développeurs ne respectaient pas les meilleures pratiques de base, de sorte que les utilisateurs comme vous et moi n'ont plus qu'à nettoyer le désordre).
Voici la version Java:
$ /Library/Java/JavaVirtualMachines/jdk1.7.0_07.jdk/Contents/Home/bin/java -version
java version "1.7.0_07"
Java(TM) SE Runtime Environment (build 1.7.0_07-b10)
Java HotSpot(TM) 64-Bit Server VM (build 23.3-b01, mixed mode)
Réponses:
Vous pouvez simplement ajouter la propriété suivante
-Dhttps.protocols=TLSv1.1,TLSv1.2
qui configure la machine virtuelle Java pour spécifier la version du protocole TLS à utiliser lors des connexions https.la source
export JAVA_OPTS="-Dhttps.protocols=TLSv1.1,TLSv1.2"
dans le fichier setenv.sh de Tomcat active à la fois TLSv1 et TLSv2 pour toutes les connexions SSL établies à partir d'applications sur le serveur d'applications.Vous pouvez essayer d’ajouter quelque chose du type suivant à votre script de démarrage, en supposant que Java 1.7:
JAVACMD="$JAVACMD -Ddeployment.security.SSLv2Hello=false -Ddeployment.security.SSLv3=false -Ddeployment.security.TLSv1=false -D\ deployment.security.TLSv1.1=true -Ddeployment.security.TLSv1.2=true"
Quelques autres suggestions: https://blogs.oracle.com/java-platform-group/entry/java_8_will_use_tls
la source
Pour Java 7 sur Mac OS X, vous accédez à
System Preferences > Java
, et le panneau de configuration Java s'ouvre dans une fenêtre séparée. Ensuite, vous allez à l'Advanced
onglet et faites défiler jusqu'à laAdvanced Security Settings
section et cochez les cases à cocherUse TLS 1.1
etUse TLS 1.2
.la source
SSLSocket
(et je suppose que cela se produit dans d'autres programmes Java), TLS 1.0 est activé (et TLS 1.1 et 1.2 sont disponibles).javac ProtocolTest.java && java ProtocolTest
dans un terminal. Voir ce qui apparaît sous Protocoles activés .J'ai récemment effectué une recherche à ce sujet et je souhaite ajouter ceci - cela ne fonctionnera pas pour JDK, le fichier deployment.properties ne concernant que les applets et autres éléments exécutés dans l'environnement JRE.
pour les applications JDK (un serveur qui doit se connecter à LDAP par exemple), le serveur est un client, mais deployment.security. ne fonctionnerait pas.
aucun moyen de le changer à moins d'écrire du code comme SSLContext.getInstance ("TLSv1.2");
la source
Il semble que les paramètres de déploiement.security. * Fonctionnent pour les programmes Java Applets et Java Web Start exécutés sur un bureau. Comme d'autres le mentionnent ici, vous pouvez éditer deployment.properties pour le spécifier.
Voici un article qui explique comment utiliser une stratégie de groupe pour déployer le même fichier deployment.properties pour tous les utilisateurs: http://www.darkoperator.com/blog/2013/1/12/pushing-security-configuration-for- java-7-update-10-via-gpo.html
Malheureusement, il n’ya aucun moyen de l’activer pour tous les programmes java sur un ordinateur qui appelle directement java.exe ou javaw.exe. Vous devez trouver chaque programme qui utilise Java, trouver le fichier de configuration dans lequel vous spécifiez les paramètres à transmettre à Java et le modifier.
Pour Tomcat , nous avons dû passer cela pour que les connexions de Tomcat vers d' autres serveurs TLS 1.1+:
-Dhttps.protocols=TLSv1.1,TLSv1.2
. Sur Linux, cela peut être fait en éditantbin/catalina.sh
ou en créantbin/setenv.sh
.Je ne sais pas ce qu'il faut pour que Tomcat utilise uniquement TLS 1.2 côté serveur. Nous faisons front avec Apache HTTP.
la source
Si vous êtes bloqué avec Java 7, vous pouvez ajouter
-Djdk.tls.client.protocols=TLSv1.1,TLSv1.2
des arguments à la machine virtuelle Java .Notez que cela a plusieurs mises en garde:
JAVA_OPTS
). Dans ce cas, vous dépendez de la prise en charge de la variable d'environnement dans vos applications Java.Malgré ces lacunes, je pense que cela pourrait être utile, en particulier lorsque le protocole qui nous intéresse utilise le protocole TLS mais n’est pas HTTPS, par exemple LDAPS.
[MISE À JOUR] Dans ma société, qui gère son pool de serveurs sur Ubuntu, nous nous sommes rendu compte que même la mise à jour 121 d'OpenJDK 7 n'était pas suffisante pour implémenter cela correctement. Nous avons mis à jour tous les serveurs pour mettre à jour 181 avant que cela fonctionne.
la source