由于Poodle攻击,现在建议禁用客户端和服务器应用程序的SSLv3,并仅允许TLS 1.0-TLS 1.2连接。
有没有一种方法可以在计算机上禁用所有基于Java的应用程序(服务器和客户端)的SSLv3,而不必修改每个Java程序?
也许有可能更改JRE的配置或使用特殊的环境变量。
有人知道这样的方法吗?
由于Poodle攻击,现在建议禁用客户端和服务器应用程序的SSLv3,并仅允许TLS 1.0-TLS 1.2连接。
有没有一种方法可以在计算机上禁用所有基于Java的应用程序(服务器和客户端)的SSLv3,而不必修改每个Java程序?
也许有可能更改JRE的配置或使用特殊的环境变量。
有人知道这样的方法吗?
由于在Java 8以下版本中没有禁用或取消特定SSL协议的方法,因此您尚未指定Java的版本。但是在Java 8中,您可以设置启用的协议,如下所示:
静态设置:
% java -Djdk.tls.client.protocols="TLSv1,TLSv1.1,TLSv1.2" MyApp
动态地:
java.lang.System.setProperty("jdk.tls.client.protocols", "TLSv1,TLSv1.1,TLSv1.2");
if(disabledSSLProtocols != null) {
String[] protocols = sslEngine.getEnabledProtocols();
List<String> protocolList = new ArrayList<String>();
for (String s : protocols) {
if (disabledSSLProtocols.contains(s)) {
log4j.info("{} protocol is disabled", s);
continue;
}
log4j.info("{} protocol is enabled", s);
protocolList.add(s);
}
sslEngine.setEnabledProtocols(protocolList.toArray(new String[0]));
}
disabledSSLProtocols
被初始化为SSLv3,SSLv2Hello
对于使用java.net包进行https连接,你可以尝试使用环境变量_JAVA_OPTIONS
来设置系统属性https.protocols
:
_JAVA_OPTIONS=-Dhttps.protocols=TLSv1,TLSv1.1,TLSv1.2
应该仅启用所提到的协议。请注意,在Java 7之前,最大支持版本为TLSv1。
此解决方案不会影响使用apache-http-connector等其他SSL连接或http连接。