【问题标题】:Can strict transport security be enforced generally?可以普遍执行严格的运输安全吗?
【发布时间】:2021-04-16 06:59:08
【问题描述】:

我想阻止用户使用 http 访问我的网站。 相反,我想强制使用 https。

通常,我的网站托管在提供商那里,他们只需勾选“强制 https”复选框。

在这种情况下,我有自己的 Ubuntu (nginx) 服务器。

我想知道我是否也可以在整个服务器范围内强制执行 https,还是必须在 HSTS 标头中使用预加载标志?

谁能指点我一份描述如何使用我的配置解决此问题的文档?

谢谢!

【问题讨论】:

    标签: ubuntu security nginx https hsts


    【解决方案1】:

    通常您需要两个 server 块,其中一个侦听普通 HTTP 端口的块将所有请求重定向到 HTTPS:

    server {
        listen               80;
        server_name          example.com;
        return               301 https://example.com$request_uri;
    }
    
    server {
        listen               443 ssl;
        server_name          example.com;
        ssl_certificate      /path/to/certificate;
        ssl_certificate_key  /path/to/privatekey;
        add_header           Strict-Transport-Security "max-age=63072000; includeSubDomains; preload";
        # all the other configuration
    }
    

    如果您还需要将所有非 www 域名请求重定向到 www one(反之亦然),请查看this 答案。

    【讨论】:

      【解决方案2】:

      @IvanShatsky 的回答展示了如何在 Nginx 中实现 HSTS(我相信这就是您所需要的)。

      只是为答案添加一些上下文:

      • 您希望同时拥有 HTTP → HTTPS 重定向和 HSTS 标头。
      • 为防止所有易受攻击的情况,您希望 HSTS 标头包含 preload 属性(除非您的 TLD 启用了 HSTS,例如 .dev.app)。
      • 要将域添加到预加载列表中,您仍需要将其提交至https://hstspreload.org

      由于启用preload 几乎是一张单程票,安全推出计划如下所示:

      我们的想法是从小处着手,逐渐增加过期时间和纳入标准。

      • 找出您拥有的所有子域(查阅 DNS CNAME 条目)。这些可能由您的服务器或第 3 方服务提供
      • 确保根域和所有子域可以通过 SSL/TLS 提供流量(可通过 HTTPS 访问)
      • 确保已配置 HTTP → HTTPS 重定向
      • 设置较小的过期时间,例如max-age=600(10 分钟),确保所有系统正常运行
      • 添加 includeSubDomains 指令
      • 对 max-age 进行增量更改。以 2 年的价值为目标
      • 添加预加载指令并将域提交到 HSTS 预加载列表

      Ultimate guide to HTTP Strict Transport Security (HSTS).

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-10-30
        • 2021-09-16
        • 2015-09-14
        • 2015-11-23
        • 1970-01-01
        • 1970-01-01
        • 2012-04-24
        相关资源
        最近更新 更多