【问题标题】:TLS1.2 support with Java 6Java 6 支持 TLS1.2
【发布时间】:2020-11-26 07:59:30
【问题描述】:

我们有一个在嵌入式平台上运行的遗留应用程序,我们使用 Java 6 作为 JVM。我们有来自需要 TLS1.2 支持的应用程序的 https 访问权限。我们使用的 JVM 不提供此功能。如何实现对应用的TLS1.2支持?

【问题讨论】:

    标签: java ssl https bouncycastle tls1.2


    【解决方案1】:

    我们可以通过使用Bouncy Castle 库来实现对 TLS1.2 的支持。

    这里是详细的解决方案

    • 为您的项目添加适当的 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)

    • 使用 TLS1.2 初始化 SSL 上下文

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-18
      • 1970-01-01
      • 2019-12-14
      • 2020-12-22
      • 1970-01-01
      • 2014-08-19
      • 2017-03-29
      • 2014-08-16
      相关资源
      最近更新 更多