![如何在 haproxy 中禁用 HSTS](https://linux22.com/image/723984/%E5%A6%82%E4%BD%95%E5%9C%A8%20haproxy%20%E4%B8%AD%E7%A6%81%E7%94%A8%20HSTS.png)
我有一个 haproxy-ssl-terminated (haproxy 1.5.8 2014/10/31, debian jessie stock) 测试网站,证书已过期。我希望能够在新证书到达时使用该网站,但 chrome 和 firefox 告诉我我已启用 HSTS。我查找了在 haproxy 中启用 HSTS 所需的内容,但在我看来,我的 中没有相关的行haproxy.conf
。此外,我没有看到相关Strict-Transport-Security
标头的任何痕迹,无论是使用 chrome/firefox 检查器还是使用 curl。
我使用时得到的标头curl --insecure -i https://....
是:
Date: Mon, 02 Jul 2018 07:27:31 GMT
Server: Apache
Last-Modified: Fri, 29 Jun 2018 08:54:36 GMT
Vary: Accept-Encoding
Content-Type: text/html
X-Varnish: 296609
Age: 0
Via: 1.1 varnish-v4
ETag: W/"962f-56fc3ff5ab00b-gzip"
Transfer-Encoding: chunked
Connection: close
Accept-Ranges: bytes
Set-Cookie: ServerID=A; path=/
Cache-control: private
我如何才能暂时禁用 HSTS?我如何才能首先检测出启用 HSTS 的原因?
答案1
从您的curl
输出中我们可以看到,目前没有标头。在 HAProxy 中,配置中Strict-Transport-Security
应该有。http-response set-header Strict-Transport-Security ...
它一直在那里前,可能在您将 HAProxy 置于 Web 服务器之前。那是在 HSTS 被设计为由浏览器缓存几秒钟之前max-age=
。如果您在那里,例如max-age=31536000
,它会被缓存一年,从最后一次出现标头开始计算。
RFC 6797 6.1.1。 max-age 指令
REQUIRED
max-age
指令指定在接收到 STS 标头字段之后的秒数,在此期间 UA 将主机(从其接收消息的主机)视为已知 HSTS 主机。
您无法暂时禁用 HSTS通过删除标头从服务器端更新证书。您需要尽早更新证书,以便新证书在旧证书到期之前到达。更好的方法是:自动更新您的证书,例如Certbot对于让我们加密证书。