为站点开启HSTS与加入HSTS Preload List

先一句话概括一下 HSTS 与 HSTS Preload List 是什么

HSTS 是让浏览器强制使用 HTTPS 连接服务器,需要至少一次访问过站点,而加入HSTS Preload List,可以让未访问过站点的浏览器也强制使用 HTTPS 连接服务器。

开启HSTS后可申请加入HSTS Preload List,域名加入后将被硬编码 Chrom 的发行版中,大多数主要的浏览器(Chrome,Firefox,Opera,Safari,IE 11和Edge)也具有基于 Chrome 列表的 HSTS 预加载列表。

开启 HSTS

请注意,本文非纯新手向教程,出现问题请留言或谷歌

HTTP严格传输安全性(HSTS)是一种Web安全策略机制,可帮助保护网站免受中间人攻击,例如协议降级攻击和 cookie 劫持。服务器可以发送通过 Strict-Transport-Security 的 HTTPS 响应标头字段将HSTS策略传达给用户,使得用户强制以 HTTPS 访问站点,减少中间人工具。

简单来说,就是让你的站点强制以更安全的 HTTPS 访问站点。

使用HSTS的好处

301重定向

对于博客而言,开启 HSTS 最大的好处莫过于减少非首次访问站点的时间(对于强制 HTTPS 的站点而言),而加入 HSTS Preload List 可以减少首次访问站点的时间。

比如上图以输入域名的方式访问知更鸟(当然主流还是收藏夹或者搜索引擎进入,会有差异),首次访问时发生了301跳转(输入域名默认以HTTP协议连接)。可以看到前后访问时间接近 1 秒。

如果你的站点使用了 TLS1.3 ,那么 HTTPS 握手时间将进一步减少。

Nginx 开启HSTS

如果你使用 Lnmp 脚本部署的服务器,或者宝塔面板(未使用过),可能已经默认帮你开启了 HSTS ,值得注意的时,要加入 HSTS Preload List ,还需要做一点修改。

打开你的 Nginx 的站点配置文件,一般位于 path/to/nignx/conf/vhost 下的 conf文件,对add_header Strict-Transport-Security行做出下列修改

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

随后在命令行输入 nginx -s reload 即可。

打开浏览器,在站点下按下 F12 刷新网页检查 HTTP 请求,如下图红框即已经开启 HSTS。

开启 HSTS 标志

加入HSTS Preload List

加入HSTS Preload List

一经开启,域名必须以 HTTPS 连接,包括子域名。请注意子域名也必须开启 HTTPS。

进入HSTS Preload List 的申请地址,提交申请即可。申请通过后需要一段时间的等待,以我的经验值是在7天左右,不过实际进入还需要一段时间,可能需要等几个 Chrome 的发行版才实际加入。

检查加入情况

加入HSTS prelaod list 检查

浏览器地址栏输入 chrome://net-internals/#hsts。类似上图中 的 static 字段即是已经被硬编码进 Chrome 中。

一些甜点

无法启用 AES-128-GCM 加密

你可能注意到 google 等站点是使用 AES-128-GCM 加密的,如果你的是 AES-256-GCM 加密,即使修改 Nginx 中的 ssl_ciphers 也无法切换加密协议,你需要修改下列配置

# 服务器指定加密套件
ssl_prefer_server_ciphers off;

如果你的站点不使用 TLS 1.0 1.1 (协议有缺陷),则上述配置可置为 off,使得客户端可自行选择加密套件。

Nginx 无法开启TLS1.3

请将 Nginx 配置文件中的所有虚拟主机的 ssl_protocols 选择一致的字段。

参考链接

3 条评论

发表评论

*