Elliptic-Curves

如何將 SSL/TLS 與完美前向保密一起使用?

  • March 22, 2015

我是密碼學領域的新手,但我想通過設置我使用 Perfect Forward Secrecy 託管的網站來使網路成為更好的網路。我有一個關於完美前向保密設置的問題列表。它是這樣的:

  • 我選擇的證書頒發機構會阻礙完美前向保密的使用嗎?
  • 如何僅使用 Perfect Forward Secrecy 創建最強的證書(這意味著如果瀏覽器不能使用 PFS,它將不會載入任何內容)?
  • 對於配置我的站點以使用這些證書(尤其是因為我只想要 PFS),我是否需要了解任何額外的設置?
  • 還有什麼我應該知道的,隨時告訴我。我對這個想法完全陌生。

在開始 SSL 握手時,客戶端發送支持的密碼套件列表(以及其他內容)。然後,伺服器根據排名選擇其中一個密碼套件,並告訴客戶端他們將使用哪一個。

這一步是決定未來連接是否具有完美前向保密性的步驟。請注意,此時,證書根本沒有進入畫面。這是因為連接是否具有完美的前向保密性取決於會話密鑰的派生方式。會話密鑰的派生方式取決於所使用的密碼套件。因此,使用臨時 Diffie-Hellman (DHE) 或橢圓曲線變體 (ECDHE) 的密碼套件將具有完美的前向保密性,而其他選項則不會。

因此,為了為您的站點配置 PFS,您要配置的是您的 Web 伺服器的密碼套件選擇選項。更多關於這下面。

我選擇的證書頒發機構會阻礙完美前向保密的使用嗎?

不會。完美的前向保密可防止主密鑰洩露。CA 無權訪問私有(主)密鑰;來自 CA 的證書是簽名的公鑰。CA 在那裡說“好的,客戶,我已經驗證這裡的公鑰確實與 相關聯<host>,它是安全的。” (或者更確切地說,它是由 CA 簽署的事實說明了這一點。)因此,您選擇的 CA 不會以任何方式影響 PFS。

如何僅使用 Perfect Forward Secrecy 創建最強的證書(這意味著如果瀏覽器不能使用 PFS,它將不會載入任何內容)?

如您所見,證書與密碼套件(以及 PFS)的選擇無關。

相反,您使用的 Web 伺服器可能在其 SSL 配置中有密碼套件配置。通常有兩個相關選項:首先,您希望伺服器使用的密碼套件,其次,伺服器如何選擇密碼套件。這是我的 nginx 配置中的相關部分:

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-RC4-SHA:ECDHE-RSA-AES128-SHA:RC4:HIGH:!MD5:!aNULL:!EDH;
ssl_prefer_server_ciphers on;

很明顯,第一行告訴 nginx 使用這四個協議。第三行告訴 nginx 優先選擇自己的密碼套件不是客戶端的密碼套件。這裡的重點是我們要準確控制將選擇哪個密碼套件。客戶端可能會發送一個建議使用非 PFS 密碼套件的命令;因此,我們信任伺服器。

第二行是魔法發生的地方。請注意,如果客戶端支持這三個 ECDHE-* 方案,我手動指定我首先需要它們。從那裡,我回到通常的計劃。我覺得有必要強調我不會拒絕不支持 PFS 的客戶端;一些加密總比沒有加密好。並非所有客戶端都支持 PFS,因此這非常重要。我意識到您的問題說您只需要 PFS 密碼套件,但我建議您不要這樣做。使用上述 nginx 配置,絕大多數連接選擇的密碼套件將具有 PFS。Apache 的配置顯然非常相似,考慮到兩者都使用 OpenSSL,這並不奇怪。

為此,一個有用的工具:SSL Labs SSL 測試。它為您提供 SSL 配置的基本等級。例如,查看Google 的成績(點擊一個)。它在等級下方有一個小綠框,通知您該站點支持其所有經過測試的瀏覽器的 PFS,如果您向下滾動到“配置”,您將看到一個密碼套件優先級列表,包括哪些密碼套件具有 PFS,以及“模擬握手”適用於當時的常見瀏覽器。

引用自:https://crypto.stackexchange.com/questions/8933