自Java 8 Update 31起,由于SSL协议中的安全漏洞,SSL 3协议默认被禁用(请参阅POODLE攻击)。
即使不推荐,如何启用它?
除非您别无选择,只能使用 SSL 3,否则下面的链接解释了配置。
更新 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 中的以下行:
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