如何配置TLS连接以保护它们免受怪异攻击(CVE 2015-0204)?

时间:2015-03-05 09:30:35

标签: java ssl jsse

对于漏洞,请参阅https://freakattack.com/

Mozilla wiki有一个包含ciphersuites推荐的页面:https://wiki.mozilla.org/Security/Server_Side_TLS#Recommended_configurations

我如何在Java上下文中应用这些或类似的建议(SSLContext,提供程序配置,Tomcat连接器等)?

3 个答案:

答案 0 :(得分:7)

从Java 7开始,可以通过名为java.security的安全策略文件将密码套件排除在使用之外,该文件位于/ lib / security目录中的Java Runtime Environment下。

策略文件定义jdk.tls.disabledAlgorithms属性以控制TLS密码选择。还有一个补充属性jdk.certpath.disabledAlgorithms来控制SSL证书中遇到的算法。您可以在Oracle网站上找到此属性的文档:JSSE Reference Guide

默认情况下,从Java 7开始,以下策略适用:jdk.tls.disabledAlgorithms = MD5,SHA1,DSA,RSA keySize< 2048 这意味着:没有MD5,没有SHA1,没有DSA。仅当密钥长度至少为2048位时才允许RSA。 您可以使用此属性进一步根据特定需求定制站点部署。默认情况下在Java中启用的所有密码套件都在密码部分下找到here(除非已明确覆盖默认的SunJSSE加密提供程序且未使用)。

正如您所看到的,默认情况下禁用所有EXPORT密码套件,因此无需为FREAK攻击配置某些内容。

根据Houtman的上述评论进行编辑:
关于POODLE:您必须在Java 7和8中考虑这一点。因为默认情况下仅从JDK 8u31禁用SSLv3协议(请参阅协议here)。

答案 1 :(得分:0)

您可以启用要使用的密码套件列表,在SSLSocket API中引用setEnabledCipherSuites方法,并可以从此列表中排除EXPORT密码套件

答案 2 :(得分:0)

将这些添加到您的SSL连接器

服务器="未指定" xpoweredBy ="假"固定="真" sslProtocol =" TLS" sslEnabledProtocols ="使用TLSv1,TLSv1.1,TLSv1.2工作" 密码=" TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384,TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384,TLS_ECDH_RSA_WITH_AES_256_CBC_SHA,TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256, TLS_ECDH_RSA_WITH_AES_128_CBC_SHA,TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA"