什么是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 www.yephy.com yephy.com; root /data/wwwroot/www.yephy.com; 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 www.yephy.com yephy.com; index index.php index.html index.htm default.php default.htm default.html; root /data/wwwroot/www.yephy.com; #HTTP_TO_HTTPS_END ssl_certificate /data/cert/www.yephy.com/fullchain.pem; ssl_certificate_key /data/cert/www.yephy.com/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 /data/logs/www.yephy.com.error.log; }
4、到https://hstspreload.org/提交。如果提交成功,则会显示如下:
如果有其它错误提示,请检查上文中的步骤是否正确。
一般来讲状态处于等待提交的话,会在浏览器发布下一个升级版本的时候提交到浏览器的 HSTS 预加载列表,大概 7-30 天。