nginx ssl和hsts设置

安德鲁·南

我想将http重定向到https并使用hsts

https://hstspreload.org/
(测试失败)错误:没有HSTS标头响应错误:响应上没有HSTS标头。

同时如何重定向和HSTS设置?

PS我已经设置了aws ssl证书和elb负载均衡。

/etc/nginx/conf.d/default.conf

server {
listen 80 default_server;
listen [::]:80 default_server;
server_name My_domain;

if ($http_x_forwarded_proto = "http") {
    return 301 https://$server_name$request_uri;
}

location / {
    root /usr/share/nginx/html;
    try_files $uri $uri/ /index.html;
}

location /api/ {
    proxy_pass              http://localhost:8080;
}

server {
    listen 443 ssl;
    server_name My_domain;

    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
}
巴里·波拉德

您尚未提供足够的设置信息,但我可以猜测发生了什么。

我猜想您是在ELB上卸载SSL,并将HTTP_X_FORWARDED_PROTO标头设置为原始方案的纯文本HTTP消息发送到Nginx

因此,如果用户进入https://www.example.com然后将其卸载了SSL / TLS及指挥交通,以http://www.example.comHTTP_X_FORWARDED_PROTO设置为“https”。在这种情况下,没有重定向(因为用户已经在使用HTTPS),也没有HSTS标头(因为用户没有在nginx上使用HTTPS,而您仅在443服务器配置中设置了该标头)。您应该将此添加到端口80服务器,以在这种情况下还提供HSTS标头:

if ($http_x_forwarded_proto = "https") {
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
}

从技术上讲,您不应在HTTP上而是仅在HTTPS上提供HSTS标头,因此最好在负载平衡级别进行设置,但我认为使用$http_x_forwarded_proto标头可以。

但是,如果我的猜测是正确的,那么这证明您没有正确使用HSTS,因此我不愿在此处添加一些警告而被遗忘。

HSTS并非没有风险。

HSTS可以很好地解决以下事实:当前,默认情况下,Web不是HTTPS,这会带来各种安全风险。但是,如果仍然需要使用HTTP,这并非没有风险。例如,如果您有一些尚未转换为HTTPS的子域(例如blog.example.com),或者对尚未转换的内部站点(例如intranet.example.com)或开发站点使用了相同的域( dev.example.com)。最后一个也可能是一个问题,因为HSTS不允许您跳过过去的HTTPS错误(例如,如果对自己的开发域使用自签名证书)。这并不是说您不应该使用HSTS-但是您应该充分理解它并进行测试,然后再使自己(和组织)感到痛苦。

因此,建议从一个很小的最高年龄开始,而不是整年(最高年龄= 31536000)开始积累。而不是全额花费去破坏事情。这样,如果您发现需要转换的网站,则您有一年或直到转换为HTTPS才将其锁定。

对于预加载来说尤其如此,在预加载中,您将标头烘焙到浏览器的代码库中,因此甚至从访问站点开始就从头开始。您基本上无法撤消此操作(Chrome至少需要3个月的时间才能将其删除,而其他浏览器则没有时间表)。因此,由于它基本上是不可逆的,因此,在对它进行完全测试之前,切勿进行预加载,看起来好像还没有。Chrome浏览器存在一个问题,即跟踪网站在请求预加载然后损坏的地方所做的所有操作我有博客关于这种危险,因为有其他人另外,预加载还有其他一些要求(您必须将preload属性添加到标头中,并且必须在基本域(https://example.com)以及您似乎没有参加的会议。

如果,例如,您从未正常访问基本域问题,则可能尤其会导致问题,因此对https://www.example.com的测试看起来不错,而http://intranet.example.com仍然有效(因为您从未在基本域中设置HSTS标头,以便可以继续通过HTTP发送它),然后进行预加载和繁荣-http: //intranet.example.com停止工作。测试此问题最简单的方法是将基本域中的资源添加到您的www站点(例如https://example.com/pixel.png),这将对访问您网站的任何人强制使用基本域的HSTS标头。

HSTS很棒。每个站点都应该使用它,每个站点都应该仅使用HTTPS-但是,直到这样做,这并非没有风险。确保在部署时了解它。慢慢来,并建立一个大的最大寿命。然后才进行预加载。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章