阳子
阳子
Published on 2024-12-05 / 23 Visits
0
0

HTTP 严格传输安全(HSTS)

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后无法访问。

A85D294E-AD89-4DDB-AA8D-64D4315F0399.png

预加载 HSTS

为了进一步增强安全性,可以将你的域名提交到浏览器的 HSTS 预加载列表中。这样,浏览器会默认使用 HTTPS 访问你的网站,即使用户从未访问过你的网站。

  1. 确保 HSTS 头包含 includeSubDomains 参数

  2. 确保 max-age 至少为 10886400 秒(126 天)

  3. 提交到预加载列表

    • 访问 HSTS Preload 网站。

    • 输入你的域名并检查是否满足所有条件。

    • 提交域名进行审核。

注意事项

  • 测试:在生产环境中启用 HSTS 之前,建议在测试环境中进行充分测试,以确保不会影响用户体验。

  • 撤销:一旦启用 HSTS,特别是预加载 HSTS,撤销将非常困难。确保你确实需要启用 HSTS 并且已经准备好处理可能的后果。

通过以上步骤,你可以有效地启用 HSTS,提高网站的安全性。


Comment