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

我想在服务器上安装一个Magento平台。 我使用Centos和nginx,并希望redirect所有http连接到https我已经在nginx domain.conf上设置了一个http httpsredirect,并且这些工作正常,但我怎样才能确保所有的连接是安全的。 我问,因为如果我也使用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或我只是错了?

希望你能给我一个build议

如果没有HSTS,则无法防止由客户端发起的第一个连接将使用HTTP而不是HTTPS,因为您无法控制用户请求的协议。 redirect只有在第一个请求之后才会激活。

通过HSTS,情况更加复杂:

  • 如果您处于浏览器的HSTS预加载列表(您当然不是),那么它应该始终只使用HTTPS连接到您的域。
  • 如果没有,浏览器首次连接到您的域名仍然可以是HTTP,但是在redirect后您发送了第一个HTTPS响应,您可以设置HSTS标头,在此之后,客户端应该只使用HTTPS在标题中为现在和将来的会议都命名。
  • 如果攻击者在第一次连接之前冒充MITM,那么HSTS不能保护你,因为他只能过滤出头部。 如果在HSTS报头设置之后发生攻击,则要做到这一点困难得多。

如何确保所有连接都安全

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

您可以分析Nginx Access日志,了解有多less个请求会从HTTPredirect到https。

在你的configuration中,有些东西需要修改为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; }