在开启HSTS之前,需要你的网站启用https,如果你的网站还没有启用Https,请看:

HSTS 作用

HSTS可以用来抵御SSL剥离攻击。SSL剥离攻击是中间人攻击的一种,由 Moxie Marlinspike 于2009年发明。他在当年的黑帽大会上发表的题为“New Tricks For Defeating SSL In Practice”的演讲中将这种攻击方式公开。SSL剥离的实施方法是阻止浏览器与服务器创建HTTPS连接。它的前提是用户很少直接在地址栏输入https://,用户总是通过点击链接或3xx重定向,从HTTP页面进入HTTPS页面。所以攻击者可以在用户访问HTTP页面时替换所有https://开头的链接为http://,达到阻止HTTPS的目的。

HSTS可以很大程度上解决SSL剥离攻击,因为只要浏览器曾经与服务器创建过一次安全连接,之后浏览器会强制使用HTTPS,即使链接被换成了HTTP。

另外,如果中间人使用自己的自签名证书来进行攻击,浏览器会给出警告,但是许多用户会忽略警告。HSTS解决了这一问题,一旦服务器发送了HSTS字段,将不再允许用户忽略警告。


服务器启用HSTS

  • Apache2 配置 HSTS

编辑你的 apache 配置文件(如 /etc/apache2/sites-enabled/website.conf 和 /etc/apache2/httpd.conf ),并加以下行到你的 HTTPS VirtualHost:

# Apache需加载mod_header库,一般位于httpd.conf文件,搜索mod_headers并取消注释。(已加载可跳过)
LoadModule headers_module modules/mod_headers.so   #然后对应站点VirtualHost里面插入HSTS响应头信息

Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"

保存后记得重启 Apache

现在你的 web 站点在每次访问时都会发送该请求头,失效时间是两年(63072000 秒)。

  • Nginx 配置 HSTS

Nginx 服务器中的配置最为简单,只需要编辑 Nginx 配置文件(如:/usr/local/nginx/conf/nginx.conf)将下面行添加到你的 HTTPS 配置的 server 块中即可:

add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";

保存后记得重启 Nginx

  • Lighttpd 配置 HSTS

将下述配置增加到你的 Lighttpd 配置文件(例如:/etc/lighttpd/lighttpd.conf):

server.modules += ( "mod_setenv" )
$HTTP["scheme"] == "https" {
    setenv.add-response-header  = ( "Strict-Transport-Security" => "max-age=63072000; 
includeSubdomains; preload")
}

保存后记得重启 Lighttpd

  • PHP通用配置 HSTS

将以下代码添加到网站根目录 index.php 中或者header.php中

header("Strict-Transport-Security: max-age=63072000; includeSubdomains; preload");

HSTS 验证

在开启了HSTS后,你部署SSL/TLS的服务检测得分就可能是A+以上了。
SSL Labs官网: https://www.ssllabs.com/
SSL/TLS安全评估: https://myssl.com/
演示: https://www.ssllabs.com/ssltest/analyze.html?d=neosey.com
演示: https://myssl.com/neosey.com?domain=neosey.com


加入 HSTS Preload List

在用户首次访问某网站是不受HSTS保护的。这是因为首次访问时,浏览器还未收到HSTS,所以仍有可能通过明文HTTP来访问,浏览器预置HSTS域名列表,Google Chrome、Firefox、Internet Explorer和Microsoft Edge实现了这一方案。

进入 HSTS Preload List Submission 官网,输入你的域名,然后开始检测。
HSTS Preload List Submission 官网: https://hstspreload.org/

HSTS CHECK

检测结果会告诉是否符合加入HSTS Preload List,没有问题的话勾选确定。

Submit

HSTS Preload List审核的时间有长有短,一旦提交后你就只能等待。


验证是否成功加入 HSTS Preload List

你可以在Chrome浏览器的地址框中输入 chrome://net-internals/#hsts 查看。

Query HSTS/PKP domain


结语

由于HSTS Preload List是一个内置于各大浏览器的Https网站列表,所以能否加入成功除了审核通过外,还得看浏览器版本的更新。一旦加入HSTS Preload List了想要退出就比较麻烦了,所以加入前一定要考虑好。

那么哪些网站适合加入HSTS Preload List?个人博客或者网站可以来玩一玩,对于安全性要求比较高的电商网站,会员管理后台等完全可以使用HSTS Preload List,对于一些有Http需要的还是不加入得好。


部分内容参考:挖站否

最后修改:2020 年 04 月 24 日 12 : 05 PM
如果觉得我的文章对你有用,请随意赞赏