禁用特定的弱密码并使用JVM属性强制执行Perfect Forward Secrecy

时间:2016-12-20 07:38:58

标签: java security encryption

我希望通过使用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级别机制?

1 个答案:

答案 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