Java HttpsURLConnection и TLS 1.2

Я прочитал в статье, что HttpsURLConnection будет прозрачно обсуждать SSL-соединение.

В официальном документе говорится:

Этот класс использует HostnameVerifier и SSLSocketFactory. Существуют стандартные реализации, определенные для обоих классов. [ 1 ]

Означает ли это, когда вы открываете соединение с

httpsCon = (HttpsURLConnection) url.openConnection();

Это уже SSL/TLS зашифровано без лишних хлопот?

Как я могу просмотреть и установить версию TLS для стандартной реализации? (Должен быть TLS 1.2 для Java 8 и TLS 1.0 для Java 7)

Рекомендации

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

Ответ 1

Вам нужно будет создать SSLContext для установки Protocoll:

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

в Java 1.7:

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

то вам просто нужно установить SSLContext в HttpsURLConnection:

httpsCon.setSSLSocketFactory(sc.getSocketFactory());

Это должно делать свое дело.

Ответ 2

Вы также можете установить протокол TLS 1.2 с помощью JDK 1.7. По умолчанию JDK 1.7 установит значение 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());

Ответ 3

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

Вышеприведенный код может использоваться для включения tls 1.1 или tls 1.2 в java 1.7