Java 7でTLS v1.2を有効にする

  • Java

  • link:/category/security-2/ [セキュリティ]

1. 概要

  • SSL接続に関しては、TLSv1.2を使用する必要があります。*実際、これはJava 8のデフォルトSSLプロトコルです。

    また、Java 7はTLSv1.2をサポートしていますが、デフォルトはTLS v1.0です。これは最近では弱すぎます。*
    このチュートリアルでは、TLS 7を使用するようにJava 7を構成するためのさまざまなオプションについて説明します。

2. Java VM引数の使用

Java 1.7.0_95以降を使用している場合は、_jdk.tls.client.protocols_プロパティを_java_コマンドライン引数として追加して、TLSv1.2をサポートできます。
java -Djdk.tls.client.protocols=TLSv1.2 <Main class or the Jar file to run>
*ただし、Java 1.7.0_95は、Oracle *からサポートを購入したお客様のみが利用できます。 そのため、Java 7でTLSv1.2を有効にするために、以下の他のオプションを確認します。

3. SSLSocketを使用する

この最初の例では、link:/java-ssl[_SSLSocketFactory_]を使用してTLSv1.2を有効にします。
最初に、* _ SSLSocketFactory#getDefault_ factoryメソッドを呼び出すことにより、デフォルトの_SSLSocketFactory_オブジェクトを作成できます。*
*その後、ホストとポートを_SSLSocket#createSocket_ *に渡すだけです:
SSLSocketFactory socketFactory = (SSLSocketFactory) SSLSocketFactory.getDefault();
SSLSocket sslSocket = (SSLSocket) socketFactory.createSocket(hosturl, port);
上記で作成されたデフォルトの_SSLSocket_には、SSLプロトコルが関連付けられていません。 SSLプロトコルをいくつかの方法でthe_SSLSocket_に関連付けることができます。
最初のアプローチでは、サポートされているSSLプロトコルの配列を__SSLSocket ___instanceの_setEnabledProtocols_メソッドに渡すことができます*:
sslSocket.setEnabledProtocols(new String[] {"TLSv1.2"});
または、同じ配列を使用して、_SSLParameters_を使用できます。
SSLParameters params = new SSLParameters();
params.setProtocols(new String[] {"TLSv1.2"});
sslSocket.setSSLParameters(params);

4. SSLContextの使用

__SSLSocket __を直接設定すると、1つの接続のみが変更されます。 __SSLContext __を使用して、_SSLSocketFactoryを作成する方法を変更できます。
そのため、_SSLSocketFactory#getInstance_を使用する代わりに、__SSLContext#getInstanceを実行して、____TLSv1.2_âをパラメーターとして指定します。
SSLContext sslContext = SSLContext.getInstance("TLSv1.2");
sslContext.init(null, null, new SecureRandom());
SSLSocketFactory socketFactory = sslContext.getSocketFactory();
SSLSocket socket = (SSLSocket) socketFactory.createSocket(url, port);
簡単な注意事項として、SSLを使用するときは常に_SecureRandom_を使用することを忘れないでください。

5. _HttpsURLConnection_の使用

もちろん、常にソケットを直接作成しているわけではありません。 多くの場合、アプリケーションプロトコルレベルです。
最後に、https://www.baeldung.com/java-http-request [_HttpsURLConnection_]でTLSv1.2を有効にする方法を見てみましょう。
まず、_URL_のインスタンスが必要です。 https://example.orgに接続していると想像してみましょう。
URL url = new URL("https://" + hosturl + ":" + port);
これで、以前と同様に_SSLContext_を設定できます。
SSLContext sslContext = SSLContext.getInstance("TLSv1.2");
sslContext.init(null, null, new SecureRandom());
*その後、最後の手順は、接続を作成し、_SSLSocketFactory _:*を提供することです。
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
connection.setSSLSocketFactory(sslContext.getSocketFactory());

6. 結論

この簡単な記事では、Java 7でTLSv1.2を有効にするいくつかの方法を示しました。
この記事で使用されているコードサンプルは、https://github.com/eugenp/tutorials/tree/master/core-java-modules/core-java-security [GitHubで]から入手できます。