【发布时间】:2015-01-30 12:35:55
【问题描述】:
自 Java 8 Update 31 起,由于 SSL 协议中的安全漏洞,默认情况下禁用 SSL 3 协议(请参阅POODLE attack)。
即使不推荐,又如何启用?
【问题讨论】:
标签: java ssl poodle-attack
自 Java 8 Update 31 起,由于 SSL 协议中的安全漏洞,默认情况下禁用 SSL 3 协议(请参阅POODLE attack)。
即使不推荐,又如何启用?
【问题讨论】:
标签: java ssl poodle-attack
除非您别无选择,只能使用 SSL 3,否则下面的链接会解释配置。
release notes for the update 31 提供了在 Java 中再次启用 SSL 3 的信息。
如前所述:
如果 SSLv3 绝对需要,则可以通过以下方式重新激活该协议 从 jdk.tls.disabledAlgorithms 属性中删除“SSLv3” java.security 文件或通过将此 Security 属性动态设置为 在 JSSE 初始化之前为“true”。
请记住,即使是 TLS 协议也可以被利用来允许使用 SSL 3 进行不安全的访问,这也是 POODLE 缺陷的一部分。仅出于关键原因才为 Java 或任何其他技术启用此功能应该是最后的手段。
【讨论】:
如果您必须在 8u31、7u75、6u91 上重新启用 SSLv3.0,您只需注释掉 JRE_HOME/lib/security/java.security 中的以下行: p>
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
学分/来源: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
【讨论】: