web-dev-qa-db-ja.com

Java HttpsURLConnectionおよびTLS 1.2

HttpsURLConnectionがSSL接続を透過的にネゴシエートするという記事を読みました。

公式文書にはこう書かれています:

このクラスはHostnameVerifierとSSLSocketFactoryを使用します。両方のクラスにデフォルトの実装が定義されています。 [ 1 ]

一度接続を開いたら

httpsCon = (HttpsURLConnection) url.openConnection();

すでにSSL/TLSで暗号化されています。

標準実装のTLSバージョンを表示および設定するにはどうすればよいですか? (Java 8の場合はTLS 1.2、Java 7の場合はTLS 1.0)

参照資料

  1. Oracle Corp.(2011)。 javax.net.ssl.HttpsURLConnection (JavaDoc)
23
Marc Wittmann

Protocollを設定するには、SSLContextを作成する必要があります。

in Java 1.8

 SSLContext sc = SSLContext.getInstance("TLSv1.2");
 // Init the SSLContext with a TrustManager[] and SecureRandom()
 sc.init(null, trustCerts, new Java.security.SecureRandom()); 

in Java 1.7

 SSLContext sc = SSLContext.getInstance("TLSv1");
 // Init the SSLContext with a TrustManager[] and SecureRandom()
 sc.init(null, trustCerts, new Java.security.SecureRandom());

次に、SSLContextHttpsURLConnectionに設定するだけです。

httpsCon.setSSLSocketFactory(sc.getSocketFactory());

それはトリックを行う必要があります。

28
JoCoaker

JDK 1.7でTLS 1.2プロトコルを設定することもできます。デフォルトでは、JDK 1.7は1.0に設定します。

SSLContext sc = SSLContext.getInstance("TLSv1.2"); //$NON-NLS-1$
sc.init(null, null, new Java.security.SecureRandom());
HttpsURLConnection con = (HttpsURLConnection) httpsURL.openConnection();
con.setSSLSocketFactory(sc.getSocketFactory());
9
Kondal Kolipaka
private static javax.net.ssl.SSLSocketFactory getFactorySimple() 
        throws Exception {
    SSLContext context = SSLContext.getInstance("TLSv1.2");`

    context.init(null, null, null);

    return context.getSocketFactory();

}

String loginurl ="some url";
HttpsURLConnection connection = null;
URL url = new URL(loginURL);

connection = (HttpsURLConnection) url.openConnection();

javax.net.ssl.SSLSocketFactory sslSocketFactory =getFactorySimple();

connection.setSSLSocketFactory(sslSocketFactory);

上記のコードを使用して、Java 1.7でtls 1.1またはtls 1.2を有効にすることができます

0
Rahul