在 SSL / TLS中,密碼套件為一系列任務選擇一組算法:密鑰協商,對稱加密,完整性檢查。
證書類型影響關鍵協議的選擇。必須考慮兩個參數:密鑰類型和密鑰用法:
- 使用RSA密鑰,您可以名義上使用“ RSA”和“ DHE_RSA”密碼套件。但是,如果服務器證書具有“密鑰用法”擴展名,並且不不包括“ keyEncipherment”標誌,則名義上您只能使用“ DHE_RSA”。
- 使用DSA密鑰,您可以只能使用一個“ DHE_DSS”密碼套件。
大多數SSL服務器證書都具有不受密鑰用法擴展限制的RSA密鑰,因此您可以同時使用“ RSA”和“ DHE_RSA”密鑰類型。
“ DHE”代表“ Diffie-Hellman Ephemeral”。這樣可以實現完美的前向保密性。 PFS意味著,如果攻擊者竊取了服務器私鑰(存儲在文件中的私鑰,因此很可能容易被盜竊),他將仍然無法解密過去記錄的交易。這是一個理想的屬性,尤其是當您希望系統在審核過程中保持良好狀態時。
對於完整性檢查,您不應使用MD5,並且如果可能,請避免使用MD5。 SHA-1也是如此。 MD5和SHA-1的當前已知弱點均不影響TLS的安全性(可能在證書中使用時除外,但這是由CA選擇的,而不是您選擇的)。但是,使用MD5(或在較小程度上使用SHA-1)對公共關係不利。 MD5被“破壞”。如果使用MD5,則可能必須證明自己是正確的。沒有人會質疑SHA-256的選擇。普遍的共識是,SHA-1出於遺留原因是“可容忍的”。
對於對稱加密,您可以在RC4、3DES和AES之間選擇(主要是RC4、3DES和AES)(對於後者,256位版本是過大的; AES-128已經可以了)。可以提出以下幾點:
-
RC4和3DES到處都受支持。最老的客戶端可能不支持AES(例如,Internet Explorer 6.0似乎無法協商基於AES的密碼套件)。
-
RC4中存在已知的弱點。沒有什麼是致命的。這種情況與SHA-1的情況有點相似:從學術上講“已損壞”,但現在不是問題。如果可以避免的話,這仍然是不使用RC4的一個很好的理由。
-
3DES是64位分組密碼。當您在單個會話中加密多個千兆字節時,這意味著一些(學術上的)弱點。
-
3DES在您的CPU上可能很繁重。在2.7 GHz Intel i7上, OpenSSL使用AES-128達到180 MB / s的加密速度(如果使用 AES-NI指令則可以做得更好),但僅使用3DES時為25 MB / s。 25 MB / s仍然不錯(這是100 Mbit / s鏈路可以處理的2.5倍,並使用單個內核),但可能無法忽略,具體取決於您的情況。
-
BEAST攻擊是一個古老的學術弱點,最近被證明可以在實踐中應用。它要求攻擊者在鏈接上進行間諜,並且在客戶端上運行惡意代碼(並且該代碼必須與外部間諜系統進行通信);當惡意的內部代碼使用Java或Javascript時,BEAST的作者設法運行了它。通用解決方案是切換到不受干擾的TLS 1.1或1.2。同樣,這僅涉及CBC模式下的分組密碼。 RC4是免疫的。
-
在SSL / TLS握手中,客戶端宣布其支持的密碼套件(優先出現的優先套件),然後服務器選擇將要使用的套件。服務器會遵守客戶的偏好設置,這是傳統的,即選擇客戶端發送的列表中服務器可以處理的第一套套件。但是服務器可以強制執行其自己的首選項順序。
-
沒有使用RC4的DHE密碼套件。
摘要:,這使我想到了以下首選的密碼套件列表。如果BEAST攻擊可能適用於您(即客戶端是Web瀏覽器),請使用以下命令:
- 如果會話使用SSL-3.0或TLS-1.0,請嘗試使用
TLS_RSA_WITH_RC4_128_SHA
。 - 如果客戶端支持TLS 1.1+,或者它不支持
TLS_RSA_WITH_RC4_128_SHA
,或者您認為PFS對您而言比BEAST更為重要主動攻擊(例如,您最關心的是長期保密性,而不是立即違反),然後使用 TLS_DHE_RSA_WITH_AES_128_CBC_SHA256
(如果客戶端不支持SHA-256,則退回到 TLS_DHE_RSA_WITH_AES_128_CBC_SHA
) - 如果客戶端不支持DHE密碼套件,請使用相應的非DHE套件。
- 通用後備代碼為
TLS_RSA_WITH_3DES_EDE_CBC_SHA
,該密碼在任何地方都可以使用。
請注意,以上選擇假定您可以根據協商的協議版本更改套件選擇,這對於您來說可能是可用的選項,也可能不是
如果BEAST不適用於您(客戶端不會運行惡意代碼),則完全放棄RC4支持;專注於AES-128和SHA-256;後退分別在3DES和SHA-1上;如果可用,請使用DHE。