Java HttpsURLConnection и TLS 1.2

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

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

Этот класс использует HostnameVerifier и SSLSocketFactory. Для обоих классов определены реализации по умолчанию. [1] < / sup>

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

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 < / em>. (JavaDoc)

person Marc Wittmann    schedule 08.05.2015    source источник
comment
Пожалуйста, не цитируйте произвольный интернет-мусор. Если вы не используете эту конкретную JRE, которую вы не указываете, правильный URL-адрес для указанной вами страницы будет на веб-сайте Oracle.   -  person user207421    schedule 08.05.2015
comment
Я добавил официальный документ вместо измененного - в неофициальном говорится, что SSL прозрачно обновлен, в официальном говорится, что существуют реализации по умолчанию. Так что мой вопрос все тот же, надеюсь, мой пост стал более прозрачным.   -  person Marc Wittmann    schedule 08.05.2015
comment
Вы можете настроить версию TLS для использования с помощью системного свойства https.protocols, см. этот ответ.   -  person vanOekel    schedule 08.05.2015
comment
Я пытаюсь сделать это в Java 1.6: stackoverflow.com/questions/33517476/   -  person Azimuts    schedule 04.11.2015
comment
Какой режим подключения по умолчанию - SSL, TLS1.0 или TLS1.2?   -  person Paritosh Agrawal    schedule 24.07.2020
comment
В зависимости от версии java в JDK 1.7 он установит TLS 1.0.   -  person Marc Wittmann    schedule 25.07.2020


Ответы (3)


Вам нужно будет создать 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());

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

person JoCoaker    schedule 02.09.2015
comment
Что такое trustCerts и как его создать / получить? - person vianna77; 23.12.2016
comment
В случае, если кому-то были интересны параметры init (), вот что говорится в документации: любой из первых двух параметров может иметь значение null, и в этом случае установленные провайдеры безопасности будут искать реализацию с наивысшим приоритетом соответствующей фабрики. Точно так же безопасный случайный параметр может иметь значение NULL, и в этом случае будет использоваться реализация по умолчанию. - person Danation; 12.06.2017
comment
См. stackoverflow.com/questions/1201048/ для тривиальной, небезопасной, полностью доверяющей реализации trustCerts - person Erich Kitzmueller; 20.02.2018

Вы также можете установить протокол 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());
person Kondal Kolipaka    schedule 13.04.2017

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.

person Rahul    schedule 18.08.2017
comment
да, вероятно, может ... но что он делает? - person foo; 28.04.2019
comment
Это помогает установить tls 1.2 в java 7, где он не включен по умолчанию в java 7 - person Rahul; 17.07.2019
comment
Что по умолчанию использует SSL, TLS1.0 или TLS1.2? - person Paritosh Agrawal; 24.07.2020