这是我一直在努力解决的问题,但是我在stackoverflow上找不到任何帮助,甚至没有找到任何帮助。我希望将来能为有类似问题的人提供帮助。非常欢迎您对此问题/答案进行详细说明。
在 Docker 环境中使用 Traefik 作为代理时,我一直试图将 STS-headers 设置为http请求。无论如何,无论我如何设置标题,我的浏览器(Google Chrome)都将忽略它们。我在做什么错了?
答案 0 :(得分:1)
当我了解到有关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"
希望它对任何人都有帮助。
答案 1 :(得分:1)
对于Traefik v2,标签如下:
labels:
- "traefik.enable=true"
- "traefik.http.routers.service.rule=Host(`service.com`)"
- "traefik.http.middlewares.servicests.headers.stsincludesubdomains=false"
- "traefik.http.middlewares.servicests.headers.stspreload=true"
- "traefik.http.middlewares.servicests.headers.stsseconds=31536000"
- "traefik.http.middlewares.servicests.headers.isdevelopment=false"
- "traefik.http.routers.service.middlewares=servicests"
我建议您将service
一词替换为服务名称。