目前,我们的平台使用以下密码套件。
适用于 AES128-GCM 的 SHA256
AES128-SHA256
AES128-SHA
哈希算法
加密算法
ECDHE-RSA-AES128-SHA
安全扫描后,团队要求我们阻止以下静态密码套件。
适用于 AES128-GCM 的 SHA256
AES128-SHA256
AES128-SHA
我们通过更新 java.security 文件中的 tls.disabled 算法部分,通过底层 JDK(由我们的应用服务器使用)阻止了上述密码套件。
这反过来也会阻止下面的密码,因为上面阻止的密码套件用于下面密码套件的密钥交换/MAC 部分。
哈希算法
加密算法
ECDHE-RSA-AES128-SHA
请告知是否有办法只阻止 AES,而不阻止带有 AES 的 ECDHE。
答案1
您可能没有意识到,OpenSSL 为歇斯底里的葡萄干标签提供的密码套件名称未指定密钥交换,但实际上使用 RSA(又称纯 RSA)密钥交换。这些 OpenSSL 名称(请参阅第 1 节中的 man ciphers,或可能是您系统上的 1ssl 或类似名称)或在网站上)实际上对应于这些标准名称:
AES128-GCM-SHA256 TLS_RSA_WITH_AES_128_GCM_SHA256
AES128-SHA256 TLS_RSA_WITH_AES_128_CBC_SHA256
AES128-SHA TLS_RSA_WITH_AES_128_CBC_SHA
secprop 的语法jdk.tls.disabledAlgorithms
仅支持单个算法,不支持组合,更不用说像“RSA 而不是 ECDHE”这样的复杂组合了。但是,您可以使用 Java 使用的(完整)名称禁用 TLS 密码套件,这是上述标准名称。因此,只需将这些名称作为逗号分隔的条目放在 secprop 中即可。
请注意,在 TLS1.3(在 Java 11 中实现)中,密码套件不再选择密钥交换和身份验证方法。但是,1.3 不再支持非 PFS 纯 RSA 密钥交换,而且由于这似乎是您的“团队”试图避免的,因此 1.3 的默认值应该适合您。