HTTP严格传输安全(HTTP Strict Transport Security,简称 HSTS)是一种安全策略机制,旨在强制客户端(如浏览器)仅通过 HTTPS 连接到服务器,从而防止中间人攻击(MITM)和协议降级攻击。
如何启用 HSTS
1. Nginx
在 Nginx 中启用 HSTS,需要在 server
块中添加 add_header
指令:
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /path/to/certificate.pem;
ssl_certificate_key /path/to/certificate.key;
# 启用 HSTS
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
}
max-age
:指定 HSTS 策略的有效期,单位为秒。常见的值是31536000
(一年)。includeSubDomains
:可选参数,表示该策略适用于所有子域名。always
:确保即使响应状态码不是 200 也发送 HSTS 头。
保存文件后,重新加载 Nginx 配置:
sudo systemctl reload nginx
2. Apache
在 Apache 中启用 HSTS,需要在虚拟主机配置文件中添加 Header
指令:
<VirtualHost *:443>
ServerName example.com
SSLEngine on
SSLCertificateFile /path/to/certificate.pem
SSLCertificateKeyFile /path/to/certificate.key
# 启用 HSTS
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
</VirtualHost>
保存文件后,重新加载 Apache 配置:
sudo systemctl reload apache2
3. HAProxy
在 HAProxy 中启用 HSTS,可以在 http-response
指令中添加 HSTS 头:
frontend https_in
bind *:443 ssl crt /path/to/certificate.pem
default_backend app_servers
# 启用 HSTS
http-response set-header Strict-Transport-Security max-age=31536000;includeSubDomains
保存文件后,重新启动 HAProxy:
sudo systemctl restart haproxy
4. Node.js
在 Node.js 应用程序中,可以在响应头中添加 HSTS 头:
const https = require('https');
const fs = require('fs');
const options = {
key: fs.readFileSync('/path/to/certificate.key'),
cert: fs.readFileSync('/path/to/certificate.pem')
};
https.createServer(options, (req, res) => {
res.setHeader('Strict-Transport-Security', 'max-age=31536000; includeSubDomains');
res.writeHead(200);
res.end('Hello World\n');
}).listen(443);
5. 阿里云
在HSTS设置对话框,打开HSTS开关,同时配置过期时间和包含子域名。
过期时间:HSTS响应头在浏览器的缓存时间,建议填入60天。配置为0时,HSTS关闭。
包含子域名:请谨慎开启,开启前,请确保该加速域名的所有子域名都已开启HTTPS,否则会导致子域名自动跳转到HTTPS后无法访问。
预加载 HSTS
为了进一步增强安全性,可以将你的域名提交到浏览器的 HSTS 预加载列表中。这样,浏览器会默认使用 HTTPS 访问你的网站,即使用户从未访问过你的网站。
确保 HSTS 头包含
includeSubDomains
参数。确保
max-age
至少为 10886400 秒(126 天)。提交到预加载列表:
访问 HSTS Preload 网站。
输入你的域名并检查是否满足所有条件。
提交域名进行审核。
注意事项
测试:在生产环境中启用 HSTS 之前,建议在测试环境中进行充分测试,以确保不会影响用户体验。
撤销:一旦启用 HSTS,特别是预加载 HSTS,撤销将非常困难。确保你确实需要启用 HSTS 并且已经准备好处理可能的后果。
通过以上步骤,你可以有效地启用 HSTS,提高网站的安全性。