2017-08-29 115 views
0

私はJava 6で動作するレガシーアプリケーションを持っています。しかし、特定のセキュリティ要因のためにTLS 1.2にアップグレードする必要があります。このため 私は次のコードを試してみました:Java 6の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の引数を設定しようとしましたが、運はありません!

答えて

1

最新の公開Java 6 SEビルドは、TLS 1.2をサポートしていない6u45です。 Java 6でTLS 1.2を使用するには、2つの可能性があります。

0

は、おそらくあなたがシステムを使用して要求を行うために、回避策として、カールのような外部のソフトウェアを使用できるJava 6のためのTLSのサポートはありません。 exec()?

2

本当の修正ですか? Java 1.7以降にアップグレードしてください。 Java 1.6 Update 45を引き続き実行し、インターネットに接続することは専門的には無謀です。

どのように無謀ですか?非常に。

オラクルはのをリリースしたため、a critical patch update for Java 1.6 Update 45をリリースしました。 4年前固定ものの中

:この脆弱性の

  • CVE-2013から2462攻撃が成功すると、任意のコードの実行を含む不正なオペレーティングシステムの乗っ取りにつながることができます。
  • CVE-2013-2463簡単に悪用可能な脆弱性により、複数のプロトコルによる認証されていないネットワーク攻撃を成功させることができます。この脆弱性の攻撃を成功させると、任意のコード実行を含む不正なオペレーティングシステムの引き継ぎにつながる可能性があります。
  • CVE-2013-2464簡単に悪用可能な脆弱性により、複数のプロトコルを使用して認証されていないネットワーク攻撃を成功させることができます。この脆弱性の攻撃を成功させると、任意のコード実行を含む不正なオペレーティングシステムの引き継ぎにつながる可能性があります。
  • CVE-2013-2465容易に悪用可能な脆弱性により、複数のプロトコルによる認証されていないネットワーク攻撃が成功する可能性があります。この脆弱性の攻撃を成功させると、任意のコード実行を含む不正なオペレーティングシステムの引き継ぎにつながる可能性があります。
  • CVE-2013-2466容易に悪用可能な脆弱性により、複数のプロトコルを使用して認証されていないネットワーク攻撃を成功させることができます。この脆弱性の攻撃を成功させると、任意のコード実行を含む不正なオペレーティングシステムの引き継ぎにつながる可能性があります。
  • CVE-2013-2468簡単に悪用可能な脆弱性により、複数のプロトコルを使用して認証されていないネットワーク攻撃を成功させることができます。この脆弱性の攻撃を成功させると、任意のコード実行を含む不正なオペレーティングシステムの引き継ぎにつながる可能性があります。
  • 10.0の脆弱性の評価を持っている

そしてSIXより - それは簡単悪用可能なリモート脆弱性があることを意味します。

重要なセキュリティ脆弱性の単なるリストです。Oracleは4年前にJava 1.6 Update 45で実際に修正されました。まだ存在するパッチには修正されていないものがたくさんあります。

は固定されていません。

は繰り返しになる:これらの脆弱性 - and a whole lot moreは - まだ45

再度のJava 1.6のアップデートには存在します。Java 1.6アップデート45を使い続けると、インターネットに接続することは無謀です。 Java 1.6 Update 45には、少なくとも25(!!!)が知られています。 CVEのスコアが9.3以上のリモート脆弱性が悪用されています。

関連する問題