Java 8 Update 31)以降、SSL 3プロトコルはSSLプロトコルのセキュリティ上の欠陥のためデフォルトで無効になっています( POODLE attack を参照).
推奨されていなくても、どのように有効にできますか?
SSL 3を使用する以外に選択肢がない場合を除き、以下のリンクで設定について説明します。
アップデート31のリリースノート は、JavaでSSL 3を再度有効にするための情報を提供します。
述べたように:
SSLv3が絶対に必要な場合、Java.securityファイルのjdk.tls.disabledAlgorithmsプロパティから「SSLv3」を削除するか、 JSSEが初期化される前に、このSecurityプロパティを動的に「true」に設定します。
TLSプロトコルでさえ、SSL 3を使用した安全でないアクセスを許可するために悪用される可能性があることに注意してください。これもPOODLEの欠陥の一部です。これをJavaまたはその他のテクノロジーで有効にすることは、重大な理由がある場合にのみ最後の手段となるはずです。
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
このように、実行時にjdk.tls.disabledAlgorithms
セキュリティプロパティを設定できます。
static {
Security.setProperty("jdk.tls.disabledAlgorithms", "");
}
DRAC 5カードに接続するには、これらの編集の両方が必要であることがわかりました。
MD5を削除します。
jdk.certpath.disabledAlgorithms=MD2, RSA keySize < 1024
SSLv3、RC4、およびMD5withRSAを削除します。
jdk.tls.disabledAlgorithms=DH keySize < 768