java - 使用 JVM 属性禁用特定的弱密码并强制执行完美前向保密

标签 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

我仍然找不到一种机制来摆脱不提供 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/

相关文章:

java - iPhone 3Des 加密匹配 Java 和 .NET key 问题,SecretKeySpec?

java - android中Tab长点击问题

Java Integer Wrapper类相关

java - Spring boot 上的 Swagger - 如何为需要参数的 POST 方法设置示例值?

c++ - XPCOM中的服务控制安全问题

用于自适应身份验证的 C# 代码

java - 当数组结束时,它将如何转到下一个 Activity ?

security - 我们什么时候应该在前端刷新访问 token ?

android - RNCryptor/JNCryptor - 在 ios 中解密在 android 中加密的字符串

java - 使用 SSL 的 MySQL JDBC 加密