禁用特定的弱密码并使用JVM属性强制执行完全正向保密

Pra*_*ash 1 java security encryption

我想通过使用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
Run Code Online (Sandbox Code Playgroud)

我仍然找不到摆脱不提供PFS的网站的机制。例如“ TLS_RSA_WITH_AES_128_GCM_SHA256”。

我可以通过“ jdk.tls.disabledAlgorithms”完成此操作吗?如果不是,是否还有其他JVM级别的机制?

小智 5

I have been able to get forward secrecy to work in our Java server by changing this in the java.security file:

1) Uncomment (remove #) in front of

crypto.policy=unlimited

(You will need at least Java 1.8.0_151 for this)

2) set jdk.tls.disabledAlgorithms to

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

(to get this list, I tested my site on ssllabs.com and listed all cipher suites SSLLabs said to be weak)

While you're working on this, you might also want to consider setting the following two variables when starting the java process, but that actually isn't needed to get forward secrecy to work:

-Djdk.tls.ephemeralDHKeySize = 2048 -Djdk.tls.rejectClientInitiatedRenegotiation = true