使用 Docker 时如何将 STS headers 与 Traefik 一起使用
How to use STS headers with Traefik when using Docker
这是我困扰了好几天的问题,但我在 Whosebug 上找不到任何帮助,甚至连帮助都没有。希望以后能帮到有类似问题的人。非常欢迎对此 question/answer 进行任何详细说明。
在使用 Traefik 作为代理时,我一直在尝试将 STS-headers 设置为 http-requests Docker环境。不知何故,无论我如何尝试设置 headers,我的浏览器 (Google Chrome) 都会忽略它们。我做错了什么?
我在 Traefik 中与 HSTS headers 斗争了好几天,当我学到一些关于 HSTS 的重要知识时:
当您使用的证书被您的浏览器认为不是 trustworthy/safe 时,您的浏览器将忽略任何 STS headers。您可以使用开发人员工具中的安全选项卡验证这一点(在 Chrome 中)。
要使 HSTS(HTTP 严格传输安全)正常工作,我必须在我的特定场景中解决接下来的几件事:
我用于开发的证书是 self-signed 并安装到我的机器上。但是因为它是self-signed,所以没有放在“Trusted Root Certification Authorities”目录中。我的浏览器抱怨它在那个目录中找不到我的证书,所以我不得不把它放在那里,否则浏览器仍然认为证书不安全。 请注意,这只是为了开发目的,官方证书正在路上。
起初我创建了我的证书,将我的域放在 CN(通用名称)部分。如今,浏览器有点忽略该部分并寻找 SAN(主题备用名称)。我必须在那个部分用我的域创建一个新证书。
这两件事是我错过的,在解决这些问题后,我的 STS headers(用于 docker-compose 服务标签)正在运行。标签 (Traefik v1.7) 如下所示:
my_service:
deploy:
labels:
- "traefik.frontend.headers.STSPreload=true"
- "traefik.frontend.headers.STSSeconds=31536000"
希望对大家有所帮助。
对于 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
一词替换为您的服务名称。
这是我困扰了好几天的问题,但我在 Whosebug 上找不到任何帮助,甚至连帮助都没有。希望以后能帮到有类似问题的人。非常欢迎对此 question/answer 进行任何详细说明。
在使用 Traefik 作为代理时,我一直在尝试将 STS-headers 设置为 http-requests Docker环境。不知何故,无论我如何尝试设置 headers,我的浏览器 (Google Chrome) 都会忽略它们。我做错了什么?
我在 Traefik 中与 HSTS headers 斗争了好几天,当我学到一些关于 HSTS 的重要知识时:
当您使用的证书被您的浏览器认为不是 trustworthy/safe 时,您的浏览器将忽略任何 STS headers。您可以使用开发人员工具中的安全选项卡验证这一点(在 Chrome 中)。
要使 HSTS(HTTP 严格传输安全)正常工作,我必须在我的特定场景中解决接下来的几件事:
我用于开发的证书是 self-signed 并安装到我的机器上。但是因为它是self-signed,所以没有放在“Trusted Root Certification Authorities”目录中。我的浏览器抱怨它在那个目录中找不到我的证书,所以我不得不把它放在那里,否则浏览器仍然认为证书不安全。 请注意,这只是为了开发目的,官方证书正在路上。
起初我创建了我的证书,将我的域放在 CN(通用名称)部分。如今,浏览器有点忽略该部分并寻找 SAN(主题备用名称)。我必须在那个部分用我的域创建一个新证书。
这两件事是我错过的,在解决这些问题后,我的 STS headers(用于 docker-compose 服务标签)正在运行。标签 (Traefik v1.7) 如下所示:
my_service:
deploy:
labels:
- "traefik.frontend.headers.STSPreload=true"
- "traefik.frontend.headers.STSSeconds=31536000"
希望对大家有所帮助。
对于 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
一词替换为您的服务名称。