HTTP Strict Transport Security (HSTS)严格传输安全是一种安全特性,帮助保护网站免受某些攻击。它确保了网络浏览器总是使用安全的 HTTPS 连接到您的网站,而不是不安全的 HTTP 协议。本指南将向您展示如何设置和改进 Apache 中的 HSTS 以获得更好的安全性。
为什么使用 HSTS?
在我们讨论如何设置 HSTS 之前,让我们先谈谈为什么 HSTS 很重要。
Stop man-in-the-middle attacks
HSTS 确保连接到您的网站始终是安全的,防止攻击者 从 HTTPS 降级到 HTTP 连接并且监视你的用户。
Stop cookie hijacking
通过强制使用 HTTPS, HSTS 可以保护用户的 cookie 免受攻击者的窃取攻击。
Meet browser requirements
一些现代浏览器要求网站使用 HTTPS,并可能显示安全警告。HSTS 可以帮助满足这些要求,并为用户提供更好的浏览体验。
在 Apache 中配置 HSTS
Access your Apache configuration file
根据您的系统,该文件可以命名为 httpd.conf、apache2.conf 或 ssl.conf。通常,您可以在 /etc/apache2 或 /etc/httpd 目录中找到它。
Enable the headers module
HSTS 是作为 HTTP 报头发送的,所以您需要确保 headers 模块是启用的。在基于 debian 的系统,你可以通以下命令来启用它:
sudo a2enmod headers
service apache2 restart
Add the HSTS header
打开配置文件,找到站点部分,并在 “<VirtualHost *:443>”块中添加这一行:
<VirtualHost *:443>
# ...
# ....
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
# ....
</VirtualHost>
这一行告诉浏览器在下一年(31536000 秒 = 1 年)为您的站点使用 HTTPS,包括所有子域。
Restart Apache
保存更改,然后重新启动 Apache 以应用更改。
service apache2 restart
在 Apache 中优化 HSTS
虽然在您的服务器上启用了 HSTS,但您可以采取其他步骤使其更好。
Use a long max-age
此参数告诉浏览器要记住使用 HTTPS 的时间。更长的最长使用时间(例如,1 年)提供了更好的安全性,但如果您停止使用 HTTPS,浏览器仍然会尝试通过 HTTPS 访问您的站点,直到 max-age 过期。
Include subdomains
该参数告诉浏览器对站点的所有子域使用 HTTPS。在启用此选项之前,请确保所有子域都支持 HTTPS 避免连接问题。
Preload HSTS
即使在第一次访问您的站点时,也强制执行 HSTS。要预加载 HSTS,请在 HSTS 配置中添加 preload 指令。
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
设置完成后,您可以将您的站点提交到 HSTS 预加载列表 https://hstspreload.org/ ,从预加载列表中删除可能需要几个月的时间,所以要确保这一步。
Renew your SSL certificate promptly
HSTS 需要有效的 SSL 证书。如果您的证书过期且未更新,浏览器可能会显示安全警告或阻止用户访问访问您的网站。
Test your implementation
设置 HSTS 之后,使用 Qualys SSL 服务器测试之类的工具来检查它是否正常工作。此工具提供对服务器 SSL 设置的详细分析,可以发现潜在的问题。