2014-04-29 04:57:20 +0000 2014-04-29 04:57:20 +0000
50
50

Activer TLS 1.1 et 1.2 pour les clients sur Java 7

Java 7 désactive TLS 1.1 et 1.2 pour les clients. De Java Cryptography Architecture Oracle Providers Documentation :

Bien que SunJSSE dans la version Java SE 7 supporte TLS 1.1 et TLS 1.2, aucune des deux versions n'est activée par défaut pour les connexions des clients. Certains serveurs n'implémentent pas correctement la compatibilité ascendante et refusent de parler aux clients TLS 1.1 ou TLS 1.2. Pour l'interopérabilité, SunJSSE n'active pas TLS 1.1 ou TLS 1.2 par défaut pour les connexions clients.

Je suis intéressé par l'activation des protocoles sur un système global (peut-être par le biais d'un fichier de configuration), et non par une solution par application Java.

Comment puis-je activer par voie administrative TLS 1.1 et 1.2 _largeur du système ?

Note : depuis POODLE, je voudrais désactiver par voie administrative SSLv3 _largeur du système. (Les problèmes avec SSLv3 sont antérieurs d'au moins 15 ans à POODLE, mais Java/Oracle/Developers n'a pas respecté les meilleures pratiques de base, donc les utilisateurs comme vous et moi doivent 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 (6)

31
31
31
2015-06-16 08:08:06 +0000

Vous pourriez simplement ajouter la propriété suivante -Dhttps.protocols=TLSv1.1,TLSv1.2 qui configure la JVM pour spécifier quelle version du protocole TLS doit être utilisée lors des connexions https.

14
14
14
2014-06-18 16:09:55 +0000

Vous pourriez essayer d'ajouter quelque chose comme ce qui suit à 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

9
9
9
2014-04-29 08:46:24 +0000

Pour Java 7 sur Mac OS X, vous allez sur System Preferences > Java, et le panneau de configuration Java s'ouvre dans une fenêtre séparée. Ensuite, vous allez dans l'onglet Advanced et vous faites défiler la section Advanced Security Settings vers le bas et vous cochez les cases Use TLS 1.1 et Use TLS 1.2.

8
8
8
2014-11-05 13:12:56 +0000

J'ai récemment fait des recherches à ce sujet et je voudrais ajouter - cela ne fonctionnera pas pour le JDK, les propriétés du deployment.properties ne concernent que les applets et d'autres choses fonctionnant dans le JRE.

pour les applications JDK (un serveur qui a besoin de se connecter à LDAP par exemple) le serveur est un client mais le deployment.security ne fonctionnerait pas.

pas moyen de le modifier à moins d'écrire du code comme SSLContext.getInstance(“TLSv1.2”) ;

4
4
4
2015-06-18 17:42:31 +0000

Il semble que les paramètres de deployment.security.* fonctionnent pour les applets Java et les programmes Java Web Start s'exécutant sur un bureau. Comme d'autres le mentionnent ici, vous pouvez modifier le fichier deployment.properties pour le spécifier. Voici un article qui montre 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'y a pas moyen d'activer cette fonction pour tous les programmes java sur un ordinateur qui appellent directement java.exe ou javaw.exe. Vous devez trouver chaque programme qui utilise java, trouver le fichier de configuration où vous spécifiez les paramètres à passer à java et le modifier.

Pour Tomcat, nous avons dû passer cela pour que les connexions de Tomcat à d'autres serveurs utilisent TLS 1.1+ : -Dhttps.protocols=TLSv1.1,TLSv1.2. Sous Linux, cela peut être fait en modifiant bin/catalina.sh ou en créant bin/setenv.sh.

Je ne sais pas ce qu'il faut faire pour que Tomcat n'utilise que TLS 1.2 du côté serveur. Nous utilisons le protocole HTTP d'Apache.

1
1
1
2018-07-04 15:02:10 +0000

Si vous êtes bloqué avec Java 7, vous pouvez ajouter -Djdk.tls.client.protocols=TLSv1.1,TLSv1.2 aux arguments de la JVM.

Notez que cela comporte plusieurs mises en garde :

  • Il n'est valable qu'à partir de la mise à jour 95 de Java 7. Référence : https://blogs.oracle.com/java-platform-group/diagnosing-tls,-ssl,-and-https
  • Ce n'est pas une solution globale, même si elle peut être définie dans une variable d'environnement (par exemple, JAVA_OPTS), auquel cas vous êtes dépendant du support de l'envvar dans vos applications Java. Malgré ces défauts, je pense que cela pourrait être utile, surtout lorsque le protocole qui nous intéresse utilise TLS mais n'est pas HTTPS, par exemple LDAPS.

[UPDATE] Dans mon entreprise, qui gère son parc de serveurs sur Ubuntu, nous avons réalisé que même la mise à jour 121 de l'OpenJDK 7 n'était pas suffisante pour l'implémenter correctement. Nous avons mis à jour tous les serveurs pour la mise à jour 181 avant qu'elle ne fonctionne.

Questions connexes

8
21
6
10
8