如何配置 TLS 连接以保护它们免受异常攻击 (CVE 2015-0204)?
How to configure TLS connections to protect them from freak attack (CVE 2015-0204)?
有关漏洞,请参阅 https://freakattack.com/。
Mozilla wiki 有一个页面推荐密码套件:https://wiki.mozilla.org/Security/Server_Side_TLS#Recommended_configurations
我如何在 Java 上下文(SSLContext、提供程序配置、Tomcat 连接器等)中应用这些或类似的建议?
您可以启用要使用的密码套件列表,请参考 SSLSocket 中的 setEnabledCipherSuites 方法 API 并且可以从该列表中排除 EXPORT 密码套件
从 Java 7 开始的密码套件可以通过名为 java.security 的安全策略文件排除使用,该文件位于 /lib/security 目录的 Java 运行时环境下。
策略文件定义 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 中考虑这一点。因为 SSLv3 协议仅从 JDK 8u31 默认禁用(请参阅协议 here 部分)。
将这些添加到您的 SSL 连接器
服务器="Unspecified" xpoweredBy="false" 安全="true"
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"
有关漏洞,请参阅 https://freakattack.com/。
Mozilla wiki 有一个页面推荐密码套件:https://wiki.mozilla.org/Security/Server_Side_TLS#Recommended_configurations
我如何在 Java 上下文(SSLContext、提供程序配置、Tomcat 连接器等)中应用这些或类似的建议?
您可以启用要使用的密码套件列表,请参考 SSLSocket 中的 setEnabledCipherSuites 方法 API 并且可以从该列表中排除 EXPORT 密码套件
从 Java 7 开始的密码套件可以通过名为 java.security 的安全策略文件排除使用,该文件位于 /lib/security 目录的 Java 运行时环境下。
策略文件定义 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 中考虑这一点。因为 SSLv3 协议仅从 JDK 8u31 默认禁用(请参阅协议 here 部分)。
将这些添加到您的 SSL 连接器
服务器="Unspecified" xpoweredBy="false" 安全="true" 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"