Magento 系统上的 SSL Everywhere 或 HSTS 并避免 HTTP

Magento 系统上的 SSL Everywhere 或 HSTS 并避免 HTTP

我想在服务器上设置 Magento 平台。我使用 Centos 和 nginx,并希望将所有 http 连接重定向到 https。我已经在 nginx domain.conf 上设置了 http https 重定向,这很好用,但我如何确保所有连接都是安全的。我之所以问这个问题,是因为如果我也使用 HSTS,第一个请求可能仍然是 http。

审查我的 example.org.conf 文件

server {
    listen 80 default_server;
    listen [::]:80 default_server;
    server_name example.org www.example.org;
    return 301 https://$server_name$request_uri;
}

server {
    #listen 80 reuseport;
    #listen 443 http2 ssl reuseport;
    listen 443 ssl;
    #listen 80;
    ...
    ...
}

那么我如何才能确保所有连接都是安全的?我问的第二个原因是,我注意到,如果我使用移动数据速度较慢的智能手机打开域名,它会在一秒钟内启动不安全的 URL,还是我错了?

希望你能给我建议

答案1

如果没有 HSTS,您就无法阻止客户端发起的第一个连接使用 HTTP 而不是 HTTPS,因为您无法控制用户请求的协议。重定向仅在第一个请求后生效。

有了 HSTS,情况就变得更加复杂了:

  • 如果您在浏览器的 HSTS 预加载列表中(您肯定不在),它应该始终且仅使用 HTTPS 连接到您的域。
  • 如果不是,浏览器与你的域名建立的第一个连接仍然可以是 HTTP,但在重定向后发送的第一个 HTTPS 响应中,你可以设置 HSTS 标头,此后,客户端应该对于当前和未来的会话,仅在标头中指定的持续时间内使用 HTTPS。
  • 如果在第一次连接之前有攻击者冒充 MITM,HSTS 无法保护您,因为他可以过滤掉标头。如果攻击发生在设置 HSTS 标头之后,那么这样做会困难得多。

答案2

如何确保所有连接都是安全的

答:您正在永久转发所有 301 https 连接,因此您的服务器不可能接受不安全的连接。

您可以分析 Nginx 访问日志来了解有多少请求从 HTTP 重定向到 https 。

在您的配置中,有些内容需要修改为 Nginx 最佳实践。

server {
    listen 80 default_server;
    listen [::]:80 default_server;
    server_name example.org www.example.org;
    return 301 https://$server_name$request_uri;
}

server {

    listen 443 ssl;

    server_name example.org www.example.org;

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
}

相关内容