Java

在沒有 ECDHE 密鑰交換算法的情況下禁用 AES 密碼套件

  • August 13, 2019

目前,我們的平台中使用了以下密碼套件。

AES128-GCM-SHA256

AES128-SHA256

AES128-SHA

ECDHE-RSA-AES128-GCM-SHA256

ECDHE-RSA-AES128-SHA256

ECDHE-RSA-AES128-SHA

安全掃描後,團隊要求我們阻止以下靜態密碼套件。

AES128-GCM-SHA256

AES128-SHA256

AES128-SHA

通過更新 java.security 文件中的 tls.disabled 算法部分,我們已經通過底層 JDK(由我們的應用伺服器使用)阻止了上述密碼套件。

這反過來也阻塞了下面的密碼,因為上面的阻塞密碼套件用於下面密碼套件的密鑰交換/MAC 部分。

ECDHE-RSA-AES128-GCM-SHA256

ECDHE-RSA-AES128-SHA256

ECDHE-RSA-AES128-SHA

請告知是否有辦法只阻止 AES 而不用 AES 阻止 ECDHE。

您可能沒有意識到這一點,但 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 的預設值應該對您有好處。

引用自:https://serverfault.com/questions/957481