什么是HSTS预加载列表
HTTP Strict Transport Security 翻译过来是:“HTTP严格安全性传输”,简称:HSTS。它是一种Web安全策略机制,可帮助保护网站免受中间人攻击,例如协议降级攻击和cookie劫持。 它允许Web服务器声明Web浏览器(或其他符合要求的用户代理)应仅使用提供传输层安全性(TLS / SSL)的HTTPS连接自动与其进行交互,这与单独使用不安全的HTTP不同。
服务器通过一个名为“ Strict-Transport-Security ”的HTTPS响应标头字段将HSTS策略传达给用户代理。HSTS策略指定用户代理只能以安全方式访问服务器的时间段。使用HSTS的网站通常不接受明文HTTP,会拒绝通过HTTP的连接,或者将HTTP连接跳转到HTTPS。
为什么HSTS预加载能让网页浏览速度更快?
通俗的来理解:HSTS会强制浏览器仅通过HTTPS连接,HSTS预加载列表是由Chrome发起的,目前也获得了其它主流浏览器的支持,例如:Chrome,Firefox,Opera,Safari,IE 11和Edge等。就是浏览器会在发布新版本的时候,将支持HSTS的域名硬编码进去,当用户访问该域名(注意:包含所有子域名)浏览器会自动进行HTTPS连接,这样减少了与服务器端的握手时间,所以更安全也让访问速度更快。
如何将域名添加到HSTS预加载列表
1、首先域名得部署SSL证书,实现了全站HTTPS访问(任何网页中都不能加载HTTP连接的资源)。
2、HTTP连接必须通过301或302跳转到HTTS连接,下面以Nginx为例:
server { listen 80; server_name abc.com www.abc.com; index index.php index.html index.htm default.php default.htm default.html; root /wwwroot/abc; if ($server_port !~ 443){ rewrite ^(/.*)$ https://$host$1 permanent; } }
3、在基本域上(非子域名)为HTTPS请求提供HSTS标头:
- max-age必须至少31536000秒(1年)。
- includeSubDomains必须指定该指令。
- preload必须指定该指令。
下面以Nginx为例,添加:“Strict-Transport-Security”标头:
server { listen 443 ssl http2; server_name abc.com www.abc.com; index index.php index.html index.htm default.php default.htm default.html; root /wwwroot/abc; #HTTP_TO_HTTPS_END ssl_certificate /cert/fullchain.pem; ssl_certificate_key /cert/privkey.pem; ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3; ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; add_header Strict-Transport-Security "max-age=31536000;includeSubdomains; preload"; #……此处省略N行 error_log /wwwlogs/error.log; }
4、到https://hstspreload.org/提交。
如果有其它错误提示,请检查上文中的步骤是否正确。
一般来讲状态处于等待提交的话,会在浏览器发布下一个升级版本的时候提交到浏览器的HSTS预加载列表,大概7-30天。