Reverse-Proxy

如何讓 Haproxy 不向後端伺服器發送 SNI 欄位?

  • March 9, 2019

在 en.wikipedia.org 而不是 zh.wikipedia.org 的反向代理工作之後,我的審查員阻止了 SNI 訪問 zh.wikipedia.org。如果沒有 SNI,那麼在 /etc/hosts 中正確的 IP 就足夠了。

原始配置:

defaults
   log 127.0.0.1:514 user
   timeout connect 5000s
   timeout client 5000s
   timeout server 5000s
listen reverse-proxy
   bind 127.0.0.1:443
   mode tcp
   balance static-rr
   server srv1 208.80.153.224

以下反向代理導致 Firefox 說:

該站點使用 HTTP 嚴格傳輸安全 (HSTS) 來指定 Firefox 只能安全地連接到它。因此,無法為此證書添加例外。

更改的配置:

global
   tune.ssl.default-dh-param 2048
defaults
   log 127.0.0.1:514 user
   timeout connect 5000s
   timeout client 5000s
   timeout server 5000s
listen reverse-proxy
   bind 127.0.0.1:443 ssl crt /home/test/wiki.pem
   mode http
   http-response set-header Strict-Transport-Security "max-age=16000000; includeSubDomains; preload;"
   balance static-rr
   server srv1 208.80.153.224 ssl verify none

正如 drookie 所說,TCP 模式無法做到這一點,但在 Haproxy 中,HTTP 模式預設不發送 SNI 欄位。

該行http-response set-header Strict-Transport-Security "max-age=16000000; includeSubDomains; preload;"沒有意義。(在這種情況下您可以刪除它)

這個真正的問題來源是瀏覽器配置,因為它預設拒絕所有未知的頒發者

警告:以下解決方法將完全禁用 HSTS,但您可以使用HTTPS Everywhere來獲得類似的安全性。

在 Firefox 中打開about:config然後更改network.stricttransportsecurity.preloadlistfalse,這個反向工作作為例外。

此外,您可能需要刪除 Firefox 中的 SiteSecurityServiceState.txt 以清除 Firefox 中的 HSTS 資訊。

警告:如果您不想使用瀏覽器擴展而無法驗證後端伺服器,請不要使用 CA 證書方式,然後為您創建一個 CA 證書,然後讓您的瀏覽器信任您的 CA 證書

在此配置中,您不能,因為您使用的是mode tcp代理,因此您的 haproxy 只是透明地將整個 HTTP 會話傳遞到後端。您應該切換到mode http並操作標題。

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