Nginx 編譯最新的 SSL(Chacha20-Poly1305),解決 Google Chomre 淘汰 SPDY 改用 HTTP/2 的問題

2016-11-10 Nginx

在今年六月,Google Chrome 51 淘汰了 SPDY/NPN 的支援,並且改採用 HTTP/2 與 ALPN

 

SPDY 為一個 Open Source 的專案,主要是用來改善在網頁傳輸的延遲增加了 55 % 的下載速度,但隨著 HTTP 協定的演進 Google Chrome 開始支援 HTTP/2 並且放棄 SPDY/NPN。

 

也就是說,即使你使用了 SPDY 也不再受到 Chrome 的支援,也不會使用 HTTP/2 的協定,但是 OpenSSL 在 1.0.2 later 才開始支援 ALPN,最瞎的是目前幾乎所有發行版本內建的 OpenSSL 全部都不支援。

alpn_support

 

目前有支援 HTTP/2 ALPN 的 SSL 有以下

  • OpenSSL:patch from Cloudflare
  • LibreSSL :maintains from OpenBSD
  • BoringSSL:maintains from Google

 

這幾種 SSL 都支援最新的 Chacha20-Poly1305,其中裡面還有一個名為「等價加密算法組」可以讓客戶端自行選擇最安全的加密形式;

 

在中國有一位JerryQu的一篇文章描述得非常詳細 使用 BoringSSL 优化 HTTPS 加密算法选择,正常狀況下是由伺服器選擇客戶端的加密形式,但 「等價加密算法組」則是可以讓瀏覽器有彈性的調整想要走的安全加密形式

 

上述這三種 SSL 各有優缺點

  • LibreSSL 針對 OpenSSL 進行全面重構,更為輕量,但目前(2.4.2)尚未支援「等價加密組」。
  • OpenSSL 相較於其他為老牌的 SSL,但因為長期累月的維護越來越肥大,相對問題也多,由於使用的人數眾多,如有重大 Bug 也較容易受重視,支援「等價加密組」。
  • BoringSSL 不支援 OCSP Stapling,由於 Google 工程師說這是有漏洞的!相對的 Chrome 也不支援 OCSP,支援「等價加密組」。

 

 

NginxAuto Patch SSL

針對如何編譯 ChaCha20-Poly1305 小弟已經有寫在 Github 分享出來使用

Github: nginxauto

 

在這個專案裡面提供了 OpenSSL(Cloudflare) / LibreSSL / BoringSSL 三種 SSL 自行選用,全面使用源始碼重新編譯,並且加入許多安全參數

 

 

 

「等價加密算法組」的設定

BoringSSL:

 

OpenSSL/LibreSSL:

 

在 Nginx 設定,以 BoringSSL 為例

 

 

 

參考資料:

Supporting HTTP/2 for Google Chrome Users

使用 BoringSSL 优化 HTTPS 加密算法选择

 

 

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *

彙整

分類

open all | close all

License

訂閱 Mr. 沙先生 的文章

輸入你的 email 用於訂閱