web-dev-qa-db-fra.com

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 Architecture de cryptographie Java Documentation pour les fournisseurs Oracle :

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é 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 système (peut-être via un fichier de configuration), et non par une solution par application Java.

Comment puis-jeactiver administrativementTLS 1.1 et 1.2à l'échelle du système?

Note: depuis POODLE, je voudraisdésactiver administrativementSSLv3à l'échelle du système. (Les problèmes liés à SSLv3 datent d’au moins 15 ans, mais Java/Oracle/Les développeurs ne respectaient pas les meilleures pratiques de base, de sorte que les utilisateurs comme vous et moi n’avons 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)
46
jww

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.

29
Tomasz Rebizant

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

14
cnst

Je viens tout juste de faire 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");

8
shlomicthailand

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

enter image description here

8
Spiff

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 devions passer cela afin 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 éditant bin/catalina.sh ou en créant bin/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.

4
sjbotha

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

Notez que cela a plusieurs mises en garde:

  • Il est uniquement valide à partir de Java 7 mise à jour 95. Référence: https://blogs.Oracle.com/Java-platform-group/diagnosing-tls,-ssl,-and-https
  • Il ne s'agit pas d'une solution à l'échelle du système, même si elle peut être définie dans une variable d'environnement (par exemple, Java_OPTS), auquel 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 ne fonctionne.

1
AbVog