
我管理一些網站,其中一個網站的安全評級很差(來自安全記分卡)。我有一個託管伺服器,所以我請IT人員幫忙,但也想更多地了解這個問題。
問題是,有舊的 TLS1.0 和 TLS1.1 密碼套件,例如:
TLS_RSA_WITH_IDEA_CBC_SHA (0x0007)
TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA
TLS_RSA_WITH_RC4_128_MD5
TLS_RSA_WITH_3DES_EDE_CBC_SHA
我的第一個想法是,這些必須位於 OpenSSL 設定檔中。但經過一些教學後,我猜它指的是 Apache 設定。 (和虛擬主機httpd.conf
)沒有明確設定的密碼套件。但其中httpd-ssl.conf
包含一些東西。
SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLHonorCipherOrder on
SSLCipherSuite ECDH+AESGCM:ECDH+CHACHA20:ECDH+AES256:!LOW:!MEDIUM:!3DES:!aNULL:!eNULL:!ADH:!DSS!EXP:!MD5:!PSK:!RC4:!SRP
我目前不明白的是:這是正確的地方嗎?也許不是,或者為什麼讀起來不同。
我在 ciphersuite.info 上讀到,上面的第一個是 IANA 名稱(?),還有 OpenSSL 名稱。但ECDH+AESGCM
舉例來說是什麼?
可能需要一些關於下一步該去哪裡的指導。不想複製和貼上訊息,但想更多地了解這個主題。然而,我不是安全或主要 IT 人員,所以我不想讀 300 頁的書:-/
答案1
這SSLCipherSuite
是設定應使用的加密演算法的正確指令。在 TLS 1.2 中,您需要設定四種演算法的組合(稱為密碼套件):
- 一種密鑰交換演算法,用於在客戶端和伺服器之間建立共享秘密。然後,雙方都可以根據該秘密導出對稱加密的金鑰。
- 用於金鑰交換的簽章演算法。
- 一種對稱密鑰演算法,用於實際加密和解密應傳輸的資料。
- 一種雜湊演算法,用於確保訊息的完整性(透過訊息驗證碼)或建構加密安全的偽隨機數產生器。
每個密碼套件都有一個唯一的識別符透過 IANA 註冊並從 開始TLS_
。例如,它TLS_DHE_RSA_WITH_AES_128_GCM_SHA256
代表:
- 密鑰交換演算法是DHE,即與臨時密鑰的Diffie-Hellman 密鑰交換。
- 簽章演算法為RSA。
- 對稱加密演算法是 GCM 模式下具有 128 位元金鑰的 AES。
- 哈希演算法是 SHA-256。
OpenSSL 作為具體 TLS 實作的提供者,讓您可以透過以下方式選擇 IANA 密碼套件:稱為「密碼清單」的自訂格式。此格式支援複雜的選擇規則,例如ECDH+AESGCM
代表包含演算法ECDH
(用於金鑰交換)和AESGCM
(用於對稱加密)的所有密碼套件。您可以使用命令檢查獲得的確切密碼套件openssl ciphers "ECDH+AESGCM"
。就我而言,該清單包括密碼套件TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
(或 OpenSSL 稱之為ECDHE-ECDSA-AES128-GCM-SHA256
)。
字串ECDH+AESGCM
本身是不是密碼套件。這是 OpenSSL 特定的密碼套件選擇規則。
在實踐中,我會使用安全密碼套件的具體列表,例如來自 Mozilla 的建議。使用 OpenSSL 選擇規則,存在包含您實際上並不打算使用的密碼套件的風險(即使您始終可以使用openssl ciphers
上述命令檢查結果)。