it-roy-ru.com

Как включить TLS 1.2 в Java 7

Я пытаюсь включить TLS 1.2 в моем веб-приложении, которое использует JBoss 6.4 и Java 1.7. У меня есть -Dhttp.protocols = TLSv1.2 в моей прикладной среде, но, похоже, он не работает для меня. 

Могу ли я что-нибудь сделать, чтобы включить TLS 1.2?

Я написал простую программу 

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

После запуска этой программы в приложении включается TLS 1.2. Я не хочу запускать эту программу, но хочу напрямую включить ее во время запуска приложения. Есть ли способ сделать это?

23
New Bee

Вы можете обновить версию Java 7 до 1.7.0_131-b31.

Для JRE 1.7.0_131-b31 на сайте Oracle:

TLSv1.2 и TLSv1.1 теперь включены по умолчанию на клиенте TLS конечные точки. Это поведение похоже на то, что уже происходит в JDK 8 релизы.

14
Joby Wilson Mathews

Есть много предложений, но я нашел два наиболее распространенных. Я сначала попробовал export Java_OPTS="-Dhttps.protocols=SSLv3,TLSv1,TLSv1.1,TLSv1.2" в командной строке перед запуском программы, но у меня это не сработало.

Затем я добавил следующий код в конструктор класса запуска, и он работал для меня.

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

Честно говоря, я не знаю в деталях, почему ctx.init(null, null, null);, но все (SSL/TLS) работают нормально для меня.

Есть еще одна опция: System.setProperty("https.protocols", "SSLv3,TLSv1,TLSv1.1,TLSv1.2");. Это также будет идти в коде, но я не пробовал.

11
ankit.vishen

Добавьте следующую опцию для Java-приложения:

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

Добавьте этот параметр в Java_OPTS или в командную строку в maven: -Dhttps.protocols=TLSv1.2

4
AntonioOtero

System.setProperty("https.protocols", "TLSv1.2"); работал в моем случае. Вы проверили это в приложении?

3
Sirsendu

Для принудительного включения TLSv1.2 в JRE7u_80 мне пришлось использовать следующий фрагмент кода перед созданием соединения JDBC.

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

Возможность подключения к Windows 10 с ОС SQL Server 2017 и TLSv1.2.

1
Vaibhav Jain

Указанные ответы верны, но я просто делюсь одной дополнительной ошибкой, которая была применима к моему случаю: помимо использования setProtocol/withProtocol, у вас могут быть некоторые неприятные банки, которые не исчезнут, даже если у вас есть правильные банки плюс Старый:

Удалить

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

Сохранить

<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 обратно совместима, но большинство библиотек - нет. Каждый день, который проходит, тем больше я хотел бы, чтобы общие библиотеки были объявлены вне закона с этим отсутствием ответственности.

Дальнейшая информация

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
Sridhar-Sarnobat

Вероятно, вы должны искать конфигурацию, которая управляет реализацией TLS базовой платформы через -Djdk.tls.client.protocols=TLSv1.2

0
Filip