Comment activer TLS 1.2 en Java 7

j'essaie d'activer TLS 1.2 dans mon application web qui utilise JBoss 6.4 et Java 1.7. J'ai -Dhttp.protocols = TLSv1.2 dans mon environnement d'application mais cela ne semble pas fonctionner pour moi.

y a-t-il quelque chose que je puisse faire pour activer TLS 1.2?

j'ai écrit un programme simple

context = SSLContext.getInstance("TLSv1.2");
context.init(null,null,null);
SSLContext.setDefault(context); 
SSLSocketFactory factory = (SSLSocketFactory)context.getSocketFactory();
SSLSocket socket = (SSLSocket)factory.createSocket();
protocols = socket.getEnabledProtocols();

après avoir lancé ce programme dans l'application, Le TLS 1.2 est activé. Je ne veux pas exécuter ce programme, mais je veux directement l'activer pendant l'application de démarrage. Est-il possible de le faire?

15
demandé sur TT. 2016-08-26 05:22:21

7 réponses

vous pouvez mettre à jour votre version Java 7 en 1.7.0_131-b31

Pour JRE 1.7.0_131-b31 dans Oracle site :

TLSv1.2 et TLSv1.1 sont maintenant activés par défaut sur le client TLS les points d'extrémité. Ce comportement est similaire à ce qui se passe déjà dans JDK 8 publier.

10
répondu Joby Wilson Mathews 2017-10-06 05:57:44

il y a beaucoup de suggestions mais j'en ai trouvé deux plus communes. J'ai d'abord essayé export JAVA_OPTS="-Dhttps.protocols=SSLv3,TLSv1,TLSv1.1,TLSv1.2" sur la ligne de commande avant le démarrage du programme, mais il ne fonctionne pas pour moi.

puis j'ai ajouté le code suivant dans le constructeur de classe de démarrage et ça a marché pour moi.

try {
        SSLContext ctx = SSLContext.getInstance("TLSv1.2");
        ctx.init(null, null, null);
        SSLContext.setDefault(ctx);
} catch (Exception e) {
        System.out.println(e.getMessage());
}

Franchement, je ne sais pas en détail pourquoi

Il y a une option de plus: System.setProperty("https.protocols", "SSLv3,TLSv1,TLSv1.1,TLSv1.2");. Il va aussi aller dans le code, mais je ne l'ai pas essayé.

8
répondu ankit.vishen 2017-10-06 05:59:15

ajouter l'option suivante pour l'application java:

-Dhttps.protocols=TLSv1,TLSv1.1,TLSv1.2  
4
répondu Meeraj Kanaparthi 2017-10-06 05:57:52

ajouter ce paramètre à JAVA_OPTS ou à la ligne de commande dans maven: -Dhttps.protocols=TLSv1.2

3
répondu AntonioOtero 2016-12-26 16:37:15

System.setProperty("https.protocols", "TLSv1.2"); a fonctionné dans mon cas. Avez-vous vérifié cela dans la demande?

1
répondu Sirsendu 2018-05-22 00:00:11

les réponses données sont correctes, mais je partage juste une gotcha supplémentaire qui était applicable à mon cas: en plus d'utiliser setProtocol/withProtocol, vous pouvez avoir une certaine mauvaise pots qui ne va pas disparaître, même si le droit des pots plus ancienne:

Supprimer

<dependency>
    <groupId>commons-httpclient</groupId>
    <artifactId>commons-httpclient</artifactId>
    <version>3.1</version>
</dependency>

Retenir

<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.2</version>
</dependency>

<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpcore</artifactId>
    <version>4.4.6</version>
</dependency>

Java est rétrocompatible, mais la plupart des bibliothèques ne le sont pas. Chaque jour qui passe plus j'aimerais que les bibliothèques partagées soient hors-la-loi avec ce manque de responsabilisation.

plus d'info

java version "1.7.0_80"
Java(TM) SE Runtime Environment (build 1.7.0_80-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.80-b11, mixed mode)
1
répondu Sridhar-Sarnobat 2018-07-14 04:23:25

Vous devriez probablement regarder la configuration qui contrôle l'implémentation TLS de la plate-forme sous-jacente via -Djdk.tls.client.protocols=TLSv1.2.

0
répondu Filip 2018-07-18 21:06:59