Come abilitare TLS 1.2 in Java 7

Sto cercando di abilitare TLS 1.2 nella mia app Web che utilizza JBoss 6.4 e Java 1.7. Ho -Dhttp.protocols = TLSv1.2 nel mio ambiente applicativo ma non sembra funzionare per me.

C’è qualcosa che potrei fare per abilitare TLS 1.2?

Ho scritto un programma semplice

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

Dopo aver eseguito questo programma all’interno dell’app, TLS 1.2 viene abilitato. Non voglio eseguire questo programma ma voglio triggersrlo direttamente durante l’avvio dell’app. C’è modo di farlo?

    È ansible aggiornare la versione di Java 7 alla 1.7.0_131-b31

    Per JRE 1.7.0_131-b31 nel sito Oracle:

    TLSv1.2 e TLSv1.1 ora sono abilitati per impostazione predefinita sugli endpoint del client TLS. Questo comportamento è simile a quello che succede già nelle versioni di JDK 8.

    Ci sono molti suggerimenti ma ho trovato due di essi più comuni. Per prima cosa ho provato ad export JAVA_OPTS="-Dhttps.protocols=SSLv3,TLSv1,TLSv1.1,TLSv1.2" sulla riga di comando prima dell’avvio del programma ma non ha funzionato per me.

    Poi ho aggiunto il seguente codice nel costruttore della class di avvio e ha funzionato per me.

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

    Francamente non so nei dettagli perché ctx.init(null, null, null); ma tutto (SSL / TLS) sta funzionando bene per me.

    C’è un’altra opzione: System.setProperty("https.protocols", "SSLv3,TLSv1,TLSv1.1,TLSv1.2"); . Andrà anche in codice ma non l’ho provato.

    Aggiungi questo parametro a JAVA_OPTS o alla riga di comando in -Dhttps.protocols=TLSv1.2 : -Dhttps.protocols=TLSv1.2

    Aggiungi la seguente opzione per l’applicazione java:

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

    System.setProperty("https.protocols", "TLSv1.2"); ha funzionato nel mio caso. Hai controllato che all’interno dell’applicazione?

    Le risposte dichiarate sono corrette, ma sto solo condividendo un altro trucchetto che era applicabile al mio caso: oltre a usare setProtocol / withProtocol , potresti avere alcuni brutti barattoli che non andranno via anche se hai i barattoli giusti più un vecchia:

    Rimuovere

      commons-httpclient commons-httpclient 3.1  

    conservare

      org.apache.httpcomponents httpclient 4.5.2   org.apache.httpcomponents httpcore 4.4.6  

    Java è compatibile con le versioni precedenti, ma la maggior parte delle librerie non lo sono. Ogni giorno che passa tanto più vorrei che le biblioteche condivise fossero messe fuori legge con questa mancanza di responsabilità.

    Ulteriori informazioni

     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) 

    Probabilmente dovresti cercare la configurazione che controlla l’implementazione TLS della piattaforma sottostante tramite -Djdk.tls.client.protocols=TLSv1.2 .