web-dev-qa-db-ja.com

JavaでSSL 3を有効にする方法

Java 8 Update 31)以降、SSL 3プロトコルはSSLプロトコルのセキュリティ上の欠陥のためデフォルトで無効になっています( POODLE attack を参照).

推奨されていなくても、どのように有効にできますか?

11
Evandro Pomatti

SSL 3を使用する以外に選択肢がない場合を除き、以下のリンクで設定について説明します。

アップデート31のリリースノート は、JavaでSSL 3を再度有効にするための情報を提供します。

述べたように:

SSLv3が絶対に必要な場合、Java.securityファイルのjdk.tls.disabledAlgorithmsプロパティから「SSLv3」を削除するか、 JSSEが初期化される前に、このSecurityプロパティを動的に「true」に設定します。

TLSプロトコルでさえ、SSL 3を使用した安全でないアクセスを許可するために悪用される可能性があることに注意してください。これもPOODLEの欠陥の一部です。これをJavaまたはその他のテクノロジーで有効にすることは、重大な理由がある場合にのみ最後の手段となるはずです。

12
Evandro Pomatti

8u31、7u75、6u91のいずれかでSSLv3.0を再度有効にする必要がある場合は、JRE_HOME/lib/security/Java.securityの次の行をコメントアウトするだけです。

 jdk.tls.disabledAlgorithms=SSLv3

コード:

import javax.net.ssl.*;

public class SocketProtocols {

  public static void main(String[] args) throws Exception {

    SSLSocketFactory factory = (SSLSocketFactory) SSLSocketFactory.getDefault();
    SSLSocket soc = (SSLSocket) factory.createSocket();

    // Returns the names of the protocol versions which are
    // currently enabled for use on this connection.
    String[] protocols = soc.getEnabledProtocols();

    System.out.println("Enabled protocols:");
    for (String s : protocols) {
      System.out.println(s);
    }

  }
} 

出力:

SSL 3.0を有効にする前

$ /jdk1.8.0_31/bin/Java SocketProtocols
Enabled protocols:
TLSv1
TLSv1.1
TLSv1.2

SSL 3.0を有効にした後

$ /jdk1.8.0_31/bin/Java SocketProtocols
Enabled protocols:
SSLv3
TLSv1
TLSv1.1
TLSv1.2

credits/source: http://javablogx.blogspot.de/2015/02/enabling-ssl-v30-in-Java-8.html

9
Aydin K.

このように、実行時にjdk.tls.disabledAlgorithmsセキュリティプロパティを設定できます。

static {
    Security.setProperty("jdk.tls.disabledAlgorithms", "");
}
8
mR_fr0g

DRAC 5カードに接続するには、これらの編集の両方が必要であることがわかりました。

MD5を削除します。

jdk.certpath.disabledAlgorithms=MD2, RSA keySize < 1024

SSLv3、RC4、およびMD5withRSAを削除します。

jdk.tls.disabledAlgorithms=DH keySize < 768
3
Chris Horting