首页 > 解决方案 > 使用 Docker 时如何在 Traefik 中使用 STS 标头

问题描述

这是我几天来一直在努力解决的问题,但我在 stackoverflow 上找不到任何帮助,甚至没有接近它。我希望将来能帮助有类似问题的人。非常欢迎对此问题/答案进行任何详细说明。

在Docker环境中使用Traefik作为代理时,我一直在尝试将STS-headers设置为 http-requests 。不知何故,无论我如何尝试设置标题,我的浏览器(谷歌浏览器)都会忽略它们。我究竟做错了什么?

标签: dockertraefikhsts

解决方案


当我了解到一些关于 HSTS 的重要信息时,我已经在 Traefik 中与 HSTS 标头作斗争了好几天:

当您的浏览器认为您使用的证书不可信/不安全时,您的浏览器将忽略任何 STS 标头。您可以使用开发人员工具中的安全选项卡验证这一点(在 Chrome 中)。

为了使 HSTS(HTTP 严格传输安全)工作,我必须在我的特定场景中解决接下来的几件事:

  • 我用于开发的证书是自签名的并安装到我的机器上。但是因为它是自签名的,所以没有放在“受信任的根证书颁发机构”目录中。我的浏览器抱怨它在那个目录中找不到我的证书,所以我不得不把它放在那里,否则浏览器仍然会认为证书不安全。请注意,这仅用于开发目的,官方证书正在开发中。

  • 起初我创建了我的证书,将我的域放在CN(通用名称)部分。如今,浏览器有点忽略该部分并寻找SAN(主题备用名称)。我必须在该部分中使用我的域创建一个新证书。

这两件事是我错过的,在解决了这些之后,我的 STS 标头(用于 docker-compose 服务标签)正在工作。标签(Traefik v1.7)如下所示:

my_service:
    deploy:
      labels:
      - "traefik.frontend.headers.STSPreload=true"
      - "traefik.frontend.headers.STSSeconds=31536000"

希望它可以帮助任何人。


推荐阅读