web-dev-qa-db-fra.com

Java HttpsURLConnection et TLS 1.2

J'ai lu dans un article que HttpsURLConnection négocierait de manière transparente la connexion SSL.

Le document officiel dit:

Cette classe utilise HostnameVerifier et SSLSocketFactory. Des implémentations par défaut sont définies pour les deux classes. [ 1 ]

Est-ce à dire une fois que vous ouvrez une connexion avec

httpsCon = (HttpsURLConnection) url.openConnection();

Il est déjà crypté SSL/TLS sans plus de tracas?

Comment puis-je afficher et définir la version TLS pour l'implémentation standard? (Doit être TLS 1.2 pour Java 8 et TLS 1.0 pour Java 7)

Les références

  1. Oracle Corp. (2011). javax.net.ssl.HttpsURLConnection . (JavaDoc)
23
Marc Wittmann

Vous devrez créer un SSLContext pour définir le Protocoll:

dans Java 1.8:

 SSLContext sc = SSLContext.getInstance("TLSv1.2");
 // Init the SSLContext with a TrustManager[] and SecureRandom()
 sc.init(null, trustCerts, new Java.security.SecureRandom()); 

dans Java 1.7:

 SSLContext sc = SSLContext.getInstance("TLSv1");
 // Init the SSLContext with a TrustManager[] and SecureRandom()
 sc.init(null, trustCerts, new Java.security.SecureRandom());

alors il vous suffit de définir le SSLContext sur HttpsURLConnection:

httpsCon.setSSLSocketFactory(sc.getSocketFactory());

Cela devrait faire l'affaire.

28
JoCoaker

Vous pouvez également définir le protocole TLS 1.2 avec le JDK 1.7. Par défaut, JDK 1.7 le définira sur 1.0.

SSLContext sc = SSLContext.getInstance("TLSv1.2"); //$NON-NLS-1$
sc.init(null, null, new Java.security.SecureRandom());
HttpsURLConnection con = (HttpsURLConnection) httpsURL.openConnection();
con.setSSLSocketFactory(sc.getSocketFactory());
9
Kondal Kolipaka
private static javax.net.ssl.SSLSocketFactory getFactorySimple() 
        throws Exception {
    SSLContext context = SSLContext.getInstance("TLSv1.2");`

    context.init(null, null, null);

    return context.getSocketFactory();

}

String loginurl ="some url";
HttpsURLConnection connection = null;
URL url = new URL(loginURL);

connection = (HttpsURLConnection) url.openConnection();

javax.net.ssl.SSLSocketFactory sslSocketFactory =getFactorySimple();

connection.setSSLSocketFactory(sslSocketFactory);

Le code ci-dessus peut être utilisé pour activer tls 1.1 ou tls 1.2 dans Java 1.7

0
Rahul