我想通过使用 JVM 属性禁用不需要的密码来实现完美前向保密(PFS)
我想通过在 java.security 文件中使用 Java 的“jdk.tls.disabledAlgorithms”属性来实现这一点。
目前我设置的属性如下 jdk.tls.disabledAlgorithms=SSLv3, TLSv1, TLSv1.1, RC4, MD5, DESede, DH keySize < 1024, RSA keySize < 2048 当我使用 TestSSLServer 测试服务器时,我得到了以下输出
Supported versions: TLSv1.2
Deflate compression: no
Supported cipher suites (ORDER IS NOT SIGNIFICANT):
TLSv1.2
RSA_WITH_AES_128_CBC_SHA
DHE_RSA_WITH_AES_128_CBC_SHA
RSA_WITH_AES_256_CBC_SHA
DHE_RSA_WITH_AES_256_CBC_SHA
RSA_WITH_AES_128_CBC_SHA256
RSA_WITH_AES_256_CBC_SHA256
DHE_RSA_WITH_AES_128_CBC_SHA256
DHE_RSA_WITH_AES_256_CBC_SHA256
TLS_RSA_WITH_AES_128_GCM_SHA256
TLS_RSA_WITH_AES_256_GCM_SHA384
TLS_DHE_RSA_WITH_AES_128_GCM_SHA256
TLS_DHE_RSA_WITH_AES_256_GCM_SHA384
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
我仍然找不到一种机制来摆脱不提供 PFS 的网站。例如。 'TLS_RSA_WITH_AES_128_GCM_SHA256'。
我可以通过“jdk.tls.disabledAlgorithms”完成这项工作吗?如果没有,还有其他JVM级别的机制吗?
最佳答案
通过在 java.security 文件中更改此设置,我已经能够在我们的 Java 服务器中工作:
1) 去掉
前面的注释(去掉#)crypto.policy=unlimited
(您至少需要 Java 1.8.0_151)
2) 将 jdk.tls.disabledAlgorithms 设置为
jdk.tls.disabledAlgorithms=SSLv3, TLSv1, TLSv1.1, RC4, MD5, DESede, DH keySize < 1024, RSA keySize < 2048, RSA_WITH_AES_128_CBC_SHA, DHE_RSA_WITH_AES_128_CBC_SHA, RSA_WITH_AES_256_CBC_SHA, DHE_RSA_WITH_AES_256_CBC_SHA, RSA_WITH_AES_128_CBC_SHA256, RSA_WITH_AES_256_CBC_SHA256, DHE_RSA_WITH_AES_128_CBC_SHA256, TLS_RSA_WITH_AES_128_CBC_SHA, TLS_RSA_WITH_AES_128_CBC_SHA256, TLS_RSA_WITH_AES_128_GCM_SHA256, TLS_RSA_WITH_AES_256_CBC_SHA, TLS_RSA_WITH_AES_256_CBC_SHA256, TLS_RSA_WITH_AES_256_GCM_SHA384
(为了获得这个列表,我在 ssllabs.com 上测试了我的网站,并列出了 SSLLabs 据说很弱的所有密码套件)
当您处理此问题时,您可能还想考虑在启动 java 进程时设置以下两个变量,但实际上不需要前向保密工作:
-Djdk.tls.ephemeralDHKeySize=2048 -Djdk.tls.rejectClientInitiatedRenegotiation=true
关于java - 使用 JVM 属性禁用特定的弱密码并强制执行完美前向保密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41237075/