由于对 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.preloadlist
false
,此反向工作如同除外。
此外,您可能需要删除 Firefox 中的 SiteSecurityServiceState.txt 以清除 Firefox 中的 HSTS 信息。
警告:如果你无法验证后端服务器,请不要使用 CA 证书方式
如果你不想使用浏览器扩展程序为您创建一个 CA 证书,然后让您的浏览器信任您的 CA 证书。