标签归档:ssl

如何将域名提交到HSTS预加载列表,以提升访问速度

什么是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发起的,目前也获得了其它主流浏览器的支持,例如:ChromeFirefoxOpera,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天。