Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java6上的TLS1.2_Java_Ssl_Tls1.2_Java 6 - Fatal编程技术网

Java6上的TLS1.2

Java6上的TLS1.2,java,ssl,tls1.2,java-6,Java,Ssl,Tls1.2,Java 6,我有一个运行在Java6上的遗留应用程序。但是,由于某些安全因素,我们需要升级到TLS 1.2。 为此,我尝试了以下代码: import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.URL; import java.net.UnknownHostException; import java.security.KeyManagementEx

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

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

但我得到了以下错误:

  The Supported Protocols are::[TLSv1.2]
  javax.net.ssl.SSLException: Received fatal alert: protocol_version
  The connection to TLS v1.2 failed!
  at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Unknown Source)
  at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Unknown Source)
  at com.sun.net.ssl.internal.ssl.SSLSocketImpl.recvAlert(Unknown Source)
  at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(Unknown Source)
  at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source)
  at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(Unknown Source)
  at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(Unknown Source)
  at sun.net.www.protocol.https.HttpsClient.afterConnect(Unknown Source)
  at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(Unknown Source)
  at sun.net.www.protocol.https.HttpsURLConnectionImpl.connect(Unknown Source)
  at TlsCheck.isSuccessfulTLS12connection(TlsCheck.java:30)
  at TlsCheck.main(TlsCheck.java:65)

有人能提出一个比设置属性更好的方法吗?我也尝试过设置JVM参数,但没有成功

最新的公共Java 6 SE版本是6u45,它不支持TLS 1.2。要在Java 6中使用TLS 1.2,我看到了两种可能性:

Oracle提供了一个付费Java SE Advance计划。在这种情况下,build 6u141具有TLS 1.2支持: 试试图书馆。您可以在以下答案中找到一个示例实现:
正如Marcel已经提到的,没有对Java6的TLS支持。也许您可以使用像curl这样的外部软件作为一种解决方法,通过System.exec?

真正的修复程序发出请求?升级到Java 1.7或更高版本。继续运行Java1.6Update45并将其连接到internet在专业上是鲁莽的

有多鲁莽?非常

因为甲骨文在四年前就发布了这个

在四年前确定的目标中:

CVE-2013-2462成功攻击此漏洞可导致未经授权的操作系统接管,包括任意代码执行。 CVE-2013-2463易于利用的漏洞允许通过多种协议成功进行未经验证的网络攻击。成功攻击此漏洞可导致未经授权的操作系统接管,包括任意代码执行。 CVE-2013-2464易于利用的漏洞允许通过多种协议成功进行未经验证的网络攻击。成功攻击此漏洞可导致未经授权的操作系统接管,包括任意代码执行。 CVE-2013-2465易于利用的漏洞允许通过多种协议成功进行未经验证的网络攻击。成功攻击此漏洞可导致未经授权的操作系统接管,包括任意代码执行。 CVE-2013-2466易于利用的漏洞允许通过多种协议成功进行未经验证的网络攻击。成功攻击此漏洞可导致未经授权的操作系统接管,包括任意代码执行。 CVE-2013-2468易于利用的漏洞允许通过多种协议成功进行未经验证的网络攻击。成功攻击此漏洞可导致未经授权的操作系统接管,包括任意代码执行。 还有六个漏洞等级为10.0,这意味着它是一个易于利用的远程漏洞

这只是Oracle四年前在Java 1.6 Update 45中实际修复的关键安全漏洞列表。还有更多未修复的补丁仍然存在

而且你一个也没修好

重申一下:这些漏洞在Java1.6更新45中仍然存在

再次强调:继续使用Java1.6Update45并将其连接到互联网是鲁莽的。Java1.6更新45至少有25个!!!CVE分数为9.3或更高的已知可远程利用的安全漏洞