网站首页> 文章专栏> 如何开启nginx的HSTS策略?
如何开启nginx的HSTS策略?
编辑时间:2018-05-07 16:23:51 作者:mogo 浏览:1749 评论:0



首先我们要了解什么是HSTS?


HTTPS(SSL和TLS)确保用户和网站通讯过程中安全,使攻击者难于拦截、修改和假冒。当用户手动输入域名或http://链接,该网站的第一个请求是未加密的,使用普通的http。最安全的网站立即发送回一个重定向使用户引向到https连接,然而,中间人攻击者可能会攻击拦截初始的http请求,从而控制用户后续的回话。

自然而然HSTS应运而生为了解决这一潜在的安全问题。即时用户输入域名或http连接,浏览器将严格的升级到https连接。

说白了就是强制让浏览器跳到https



HSTS是怎么工作的?


HSTS是通过https 的头部发送的。


blob.png


看到红色的区域


strict-transport-security: max-age=63072000;


这个的意思是:当浏览器从HTTPS中看到这个头部,就能知道这个域名只能通过HTTPS访问了,并且将信息缓存63072000,也就是2年左右。大部分站长会设置3153600;


strict-transport-security: max-age=63072000;includeSubdomains;


这个includeSubdomains;参数的意思是告诉浏览器该策略适用于当前域下的所有子域


strict-transport-security: max-age=63072000;includeSubdomains;preload


preload 有效防止中间人


nginx是怎么配置HSTS的?


在nginx配置文件中设置HSTS响应头部

server {

        listen       80;        

  listen       443 ssl;

        server_name  xxxx.com;

        ssl_certificate     xxx.crt;

        ssl_certificate_key  xxxxx.key;

        ssl_session_timeout  5m;

        ssl_protocols  SSLv2 SSLv3 TLSv1;

        ssl_ciphers  HIGH:!aNULL:!MD5;

        ssl_prefer_server_ciphers   on;

  add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

        if ($scheme = http) {

            return   301 https://xxxx.com$request_uri;

        }

        location / {

            root   /home/xxx.com;

            index  index.html index.htm default.html default.htm index.php default.php app.php u.php;

        }

autoindex off;

include advanced_settings.conf;

#include expires.conf;

location ~* .*\/(attachment|attachments|uploadfiles|avatar)\/.*\.(php|php5|phps|asp|aspx|jsp)$ {

        deny all;

        }

        location ~ ^.+\.php {

            root        /home/xxx.com;

            fastcgi_pass   bakend;

            fastcgi_index  index.php;

 fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;

 fastcgi_param  PATH_INFO $fastcgi_path_info;

 fastcgi_param  PATH_TRANSLATED $document_root$fastcgi_path_info;

            include        fastcgi.conf;

        }

}


 是同时使用了HTTP和HTTPS并行

  listen       80;        

  listen       443 ssl;


 有时候需要将HTTP请求重定向到HTTPS

        

if ($scheme = http) {

  return   301 https://xxxx.com$request_uri;

}






来说两句吧
最新评论