Поддержка TLS1.2 с Java 6

#java #ssl #https #bouncycastle #tls1.2

#java #ssl #https #bouncycastle #tls1.2

Вопрос:

У нас есть устаревшее приложение, работающее на встроенной платформе, где мы используем Java 6 в качестве JVM. У нас есть доступ по протоколу https из приложения, которому требуется поддержка TLS1.2. Используемая нами JVM этого не обеспечивает. Как добиться поддержки TLS1.2 для приложения?

Ответ №1:

Мы могли бы добиться поддержки TLS1.2 с помощью библиотеки Bouncy Castle.

Вот подробное решение

  • Добавьте соответствующие библиотеки BC в свой проект

Зависимость от Maven

      <dependency>
            <groupId>org.bouncycastle</groupId>
            <artifactId>bcprov-jdk15to18</artifactId>
            <version>1.64</version>
    </dependency>
    <dependency>
            <groupId>org.bouncycastle</groupId>
            <artifactId>bctls-jdk15to18</artifactId>
            <version>1.64</version>
    </dependency>
 
  • Добавьте поставщика безопасности как BC
       if (Security.getProvider(BouncyCastleProvider.PROVIDER_NAME) == null) {
          Security.insertProviderAt(new BouncyCastleProvider(), 1);
      }
      // add provider only if it's not in the JVM
      if (Security.getProvider(BouncyCastleJsseProvider.PROVIDER_NAME) == null) {
          Security.insertProviderAt(new BouncyCastleJsseProvider(), 2);
      }
     

В качестве альтернативы вы можете обновить JRE / lib / security /java.security

 security.provider.1=org.bouncycastle.jce.provider.BouncyCastleProvider
security.provider.2=org.bouncycastle.jsse.provider.BouncyCastleJsseProvider
security.provider.3=sun.security.provider.Sun
security.provider.4=sun.security.rsa.SunRsaSign
security.provider.5=com.sun.net.ssl.internal.ssl.Provider
security.provider.6=com.sun.crypto.provider.SunJCE
security.provider.7=sun.security.jgss.SunProvider
security.provider.8=com.sun.security.sasl.Provider
 

Библиотеки BC должны быть сверху (1 и 2)

  • Инициализируйте контекст SSL с помощью TLS1.2
     SSLContext tls = SSLContext.getInstance("TLSv1.2");
    tls.init(null, null, null);
    SSLContext.setDefault(tls);
     

Тестирование

      HttpsURLConnection urlConnection = null;

    try {

        URL url = new URL("https://www.nist.gov/");
        urlConnection = (HttpsURLConnection) url.openConnection();

        String data = IOUtils.toString(urlConnection.getInputStream(), "UTF-8");
        System.out.println(data);
        
    } catch (IOException ex) {
        ex.printStackTrace();
        try {
            if (urlConnection != null) {
                code = ((HttpURLConnection) urlConnection).getResponseCode();
                message = ((HttpURLConnection) urlConnection).getResponseMessage();
            } else {
                message = ex.toString();
            }
        } catch (IOException ex2) {
            message = ex2.toString();
        }

        System.out.println("Response : "   message);
    } finally {
        if (urlConnection != null) {
            urlConnection.disconnect();
        }
    }