HTTP严格传输安全协议(HSTS)配置指南
HTTP严格传输安全协议(HSTS, HTTP Strict Transport Security)是一种网络安全策略,用于强制客户端(如浏览器)通过HTTPS与服务器建立连接,它通过服务器响应头Strict-Transport-Security
实现,而非直接“购买”的服务,以下是配置HSTS的详细步骤和注意事项:
服务器配置示例
Nginx配置
# 在server块中添加: add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
Apache配置
# 在.htaccess或配置文件中添加: <IfModule mod_headers.c> Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" </IfModule>
IIS配置
# 在HTTPS站点的“响应头”中添加: Name: Strict-Transport-Security Value: max-age=31536000; includeSubDomains; preload
关键参数说明
参数 | 作用 | 建议值 |
---|---|---|
max-age |
强制HTTPS的时长(秒) | ≥18周(推荐31536000秒=1年) |
includeSubDomains |
是否包含所有子域名 | 根据需求启用(如启用需全站HTTPS) |
preload |
提交到浏览器预加载列表 | 需满足严格条件(见下文) |
提交HSTS预加载(可选)
- 作用:将域名加入浏览器根证书存储的预加载列表,即使首次访问也强制HTTPS。
- 要求:
- 全站启用HSTS(包括所有子域名)。
- 使用受信任的CA机构颁发的证书。
- 提交域名至HSTS预加载列表。
- 流程:
- 配置HSTS并满足上述要求。
- 通过hstspreload.org提交域名。
- 审核通过后,浏览器将直接强制执行HSTS。
注意事项
- 不可撤回性:
- 一旦域名被加入HSTS预加载列表,无法轻易撤销。
- 未预加载的HSTS规则在浏览器中缓存
max-age
时间,过期前无法关闭。
- 兼容性测试:
- 配置后需测试所有子域名和页面均支持HTTPS。
- 使用工具(如SecurityHeaders.io)验证响应头。
- 风险:
确保站点无HTTP资源(如图片、脚本),否则HSTS可能导致资源加载失败。
相关问题与解答
问题1:HSTS和SSL有什么区别?
- SSL/TLS:加密通信协议,用于保护数据传输安全。
- HSTS:安全策略,强制客户端使用HTTPS,依赖SSL/TLS证书。
- 关系:HSTS基于SSL/TLS,但更严格(如禁止降级为HTTP)。
问题2:如何撤销HSTS预加载?
- 未预加载的情况:删除服务器上的HSTS响应头,等待
max-age
时间过期(浏览器将不再强制HTTPS)。 - 已预加载的情况:需联系HSTS预加载列表管理员申请移除,流程