我希望通过使用JVM属性禁用不需要的密码来实现Perfect Forward Secrecy(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级别机制?
答案 0 :(得分:4)
通过更改java.security文件中的设置,我已经能够秘密地在Java服务器中工作:
1)取消注释
crypto.policy =无限制
(为此,您至少需要Java 1.8.0_151)
2)将jdk.tls.disabledAlgorithms设置为
jdk.tls.disabledAlgorithms = SSLv3的,使用TLSv1,TLSv1.1,RC4,MD5,DESede,DH密钥大小<1024,RSA密钥大小<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