Java 6上的TLS 1.2

时间:2017-08-29 07:07:10

标签: java ssl tls1.2 java-6

我有一个在Java 6上运行的遗留应用程序。但是,由于某些安全因素,我们需要升级到TLS 1.2。 为此,我尝试了以下代码:

@Transactional

}

但我收到以下错误:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.UnknownHostException;
import java.security.KeyManagementException;
 import java.security.NoSuchAlgorithmException;
 import java.util.Arrays;
 import javax.net.ssl.HttpsURLConnection;
 import javax.net.ssl.SSLContext;
 import javax.net.ssl.SSLParameters;

public class TlsCheck {

/**
 * test whether this client can connect to TLS v1.2 or not
 */

public static boolean isSuccessfulTLS12connection(){
    try{
        SSLContext sslContext = SSLContext.getInstance("TLS");
        sslContext.init(null, null, null);
        HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory());

        URL url = new URL("https://tlstest.paypal.com");
        HttpsURLConnection httpsConnection = (HttpsURLConnection)url.openConnection();
        httpsConnection.connect();
        BufferedReader reader = new BufferedReader(new InputStreamReader(httpsConnection.getInputStream()));
        StringBuilder body = new StringBuilder();
        while(reader.ready()){
            body.append(reader.readLine());
        }
        httpsConnection.disconnect();
        System.out.println("The body is::"+body.toString());
        if(body.toString().equals("PayPal_Connection_OK")){
            return true;
        }
    }catch(NoSuchAlgorithmException ne){
        ne.printStackTrace();
    }catch(UnknownHostException ue){
        ue.printStackTrace();
    }catch(IOException ioe){
        ioe.printStackTrace();
    }catch(KeyManagementException ke){
        ke.printStackTrace();
    }
    return false;
}

public static void main(String args[]){
    try{
        SSLParameters sslParams = SSLContext.getDefault().getSupportedSSLParameters();
        System.setProperty("https.protocols", "TLSv1,TLSv1.1,TLSv1.2");
        sslParams.setProtocols(new String[] { "TLSv1.2"});
        String[] protocols = sslParams.getProtocols();
        System.out.println("The Supported Protocols are::"+Arrays.asList(protocols));

    }catch(NoSuchAlgorithmException ne){
        ne.printStackTrace();
    }

    if(isSuccessfulTLS12connection()){
        System.out.println("The connection to TLS v1.2 endpoint is succesful");
    }else{
        System.out.println("The connection to TLS v1.2 failed!");
    }
}

有人能建议更好的方式而不是设置财产吗?我也试过设置JVM参数,但没有运气!

3 个答案:

答案 0 :(得分:3)

真正的解决方案?升级到Java 1.7或更高版本。继续运行Java 1.6 Update 45并将其连接到互联网是专业的鲁莽。

如何鲁莽?非常

因为Oracle在四年前发布了a critical patch update for Java 1.6 Update 45 fixed over 40 security vulnerabilities

在那些固定的四年前

  • CVE-2013-2462此漏洞的成功攻击可能导致未经授权的操作系统接管,包括任意代码执行。
  • CVE-2013-2463易于利用的漏洞允许通过多种协议成功进行未经身份验证的网络攻击。成功攻击此漏洞可能导致未经授权的操作系统接管,包括任意代码执行。
  • CVE-2013-2464易于利用的漏洞允许通过多种协议成功进行未经身份验证的网络攻击。成功攻击此漏洞可能导致未经授权的操作系统接管,包括任意代码执行。
  • CVE-2013-2465易于利用的漏洞允许通过多种协议成功进行未经身份验证的网络攻击。成功攻击此漏洞可能导致未经授权的操作系统接管,包括任意代码执行。
  • CVE-2013-2466易于利用的漏洞允许通过多种协议成功进行未经身份验证的网络攻击。成功攻击此漏洞可能导致未经授权的操作系统接管,包括任意代码执行。
  • CVE-2013-2468易于利用的漏洞允许通过多种协议成功进行未经身份验证的网络攻击。成功攻击此漏洞可能导致未经授权的操作系统接管,包括任意代码执行。

SIX 更多,漏洞评级为10.0 - 这意味着它是一个易于可利用的远程漏洞。

这只是四年前Oracle在Java 1.6 Update 45中实际修复的严重安全漏洞的列表。在那个仍然存在的补丁中还有更多的东西没有被修复。

你没有修复任何

重申:这些漏洞 - and a whole lot more - 仍然存在于Java 1.6 Update 45中。

再次:继续使用Java 1.6 Update 45并将其连接到互联网鲁莽。 Java 1.6 Update 45具有至少25(!!!)已知可远程利用的安全漏洞,CVE分数为9.3或更高。

答案 1 :(得分:2)

最新的Java 6 SE公共版本是6u45,不支持TLS 1.2。要将TLS 1.2与Java 6一起使用,我发现了两种可能性:

答案 2 :(得分:0)

正如Marcel已经提到的,Java 6没有TLS支持。也许您可以使用像curl这样的外部软件作为解决方法来使用System.exec()发出请求?