如何让 Haproxy 不将 SNI 字段发送到后端服务器?

如何让 Haproxy 不将 SNI 字段发送到后端服务器?

由于对 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

答案1

在此配置中,您无法这样做,因为您正在使用mode tcp代理,因此您的 haproxy 只是透明地将整个 HTTP 会话传递到后端。您应该切换到并mode http操作标头。

答案2

正如 drookie 所说,TCP 模式不能做到这一点,但是在Haproxy中,HTTP模式默认不发送SNI字段。
此行http-response set-header Strict-Transport-Security "max-age=16000000; includeSubDomains; preload;"没有意义。(在这种情况下你可以将其删除)
这个真正的问题根源是浏览器配置,因为它默认拒绝所有未知发行者

警告:以下解决方法将完全禁用 HSTS,但您可以使用无处不在的 HTTPS获得类似的安全。
about:config在 Firefox 中打开改成network.stricttransportsecurity.preloadlistfalse,此反向工作如同除外。
此外,您可能需要删除 Firefox 中的 SiteSecurityServiceState.txt 以清除 Firefox 中的 HSTS 信息。

警告:如果你无法验证后端服务器,请不要使用 CA 证书方式
如果你不想使用浏览器扩展程序为您创建一个 CA 证书,然后让您的浏览器信任您的 CA 证书

相关内容