wake-up-neo.net

So aktivieren Sie TLS 1.2 in Java 7

Ich versuche, TLS 1.2 in meiner Web-App zu aktivieren, die JBoss 6.4 und Java 1.7 verwendet. Ich habe -Dhttp.protocols = TLSv1.2 in meiner Anwendungsumgebung, aber es scheint für mich nicht zu funktionieren. 

Kann ich irgendetwas tun, um TLS 1.2 zu aktivieren?

Ich habe ein einfaches Programm geschrieben 

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();

Nachdem Sie dieses Programm in der App ausgeführt haben, wird TLS 1.2 aktiviert. Ich möchte dieses Programm nicht ausführen, aber ich möchte es direkt beim Start der App aktivieren. Gibt es eine Möglichkeit, dies zu tun?

23
New Bee

Sie können Ihre Java 7-Version auf 1.7.0_131-b31 aktualisieren

Für JRE 1.7.0_131-b31 in Oracle-Site:

TLSv1.2 und TLSv1.1 sind jetzt standardmäßig auf dem TLS-Client aktiviert Endpunkte. Dies ist ein ähnliches Verhalten wie in JDK 8 Veröffentlichungen.

14

Es gibt viele Vorschläge, aber ich habe zwei davon am häufigsten gefunden. Ich habe zuerst export Java_OPTS="-Dhttps.protocols=SSLv3,TLSv1,TLSv1.1,TLSv1.2" in der Befehlszeile versucht, bevor das Programm gestartet wurde, aber es funktionierte nicht für mich.

Dann fügte ich folgenden Code in Startup-Klassenkonstruktor hinzu und es funktionierte für mich.

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

Ehrlich gesagt weiß ich nicht genau, warum ctx.init(null, null, null); aber alle (SSL/TLS) für mich funktionieren.

Es gibt eine weitere Option: System.setProperty("https.protocols", "SSLv3,TLSv1,TLSv1.1,TLSv1.2");. Es wird auch in Code gehen, aber ich habe es nicht ausprobiert.

11
ankit.vishen

Fügen Sie folgende Option für die Java-Anwendung hinzu:

-Dhttps.protocols=TLSv1,TLSv1.1,TLSv1.2  
9

Fügen Sie diesen Parameter zu Java_OPTS oder zur Befehlszeile in maven hinzu: -Dhttps.protocols=TLSv1.2

4
AntonioOtero

System.setProperty("https.protocols", "TLSv1.2"); hat in meinem Fall funktioniert. Haben Sie das in der Anwendung überprüft?

3
Sirsendu

Um die Aktivierung von TLSv1.2 in JRE7u_80 zu erzwingen, musste ich vor dem Erstellen der JDBC-Verbindung den folgenden Codeausschnitt verwenden.

import Java.security.NoSuchAlgorithmException;
import Java.security.Provider;
import javax.net.ssl.SSLContextSpi;
import Sun.security.jca.GetInstance;
import Sun.security.jca.ProviderList;
import Sun.security.jca.Providers;

public static void enableTLSv12ForMssqlJdbc() throws NoSuchAlgorithmException
{
    ProviderList providerList = Providers.getProviderList();
    GetInstance.Instance instance = GetInstance.getInstance("SSLContext", SSLContextSpi.class, "TLS");
    for (Provider provider : providerList.providers())
    {
        if (provider == instance.provider)
        {
            provider.put("Alg.Alias.SSLContext.TLS", "TLSv1.2");
        }
    }
}

Ermöglicht die Verbindung zu Windows 10 mit einem Betriebssystem mit SQL Server 2017 und TLSv1.2.

1
Vaibhav Jain

Die angegebenen Antworten sind korrekt, aber ich teile nur eine weitere Option, die für meinen Fall zutreffend war: Zusätzlich zur Verwendung von setProtocol/withProtocol können Sie einige unangenehme Gläser haben, die nicht verschwinden, selbst wenn sie die richtigen Gläser plus haben alte:

Löschen

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

Behalten

<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 ist abwärtskompatibel, die meisten Bibliotheken jedoch nicht. Jeder Tag, der vergeht, umso mehr wünschte ich, dass gemeinsam genutzte Bibliotheken mit diesem Mangel an Verantwortlichkeit geächtet wurden.

Weitere Informationen

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

Sie sollten wahrscheinlich über -Djdk.tls.client.protocols=TLSv1.2 nach der Konfiguration suchen, die die zugrunde liegende Plattform-TLS-Implementierung steuert. 

0
Filip

Ich habe dieses Problem mit gelöst

Service.setSslSecurityProtocol(SSLSecurityProtocol.TLSv1_2);
0
Omar