Apache强制HTTPS需四步:启用mod_ssl模块、配置80端口301重定向至HTTPS、在443端口启用HSTS头(max-age=63072000; includeSubDomains; preload)、禁用TLSv1.0/1.1并限定强加密套件。

要让 Apache 强制所有通信走 HTTPS,并杜绝降级风险,关键不是只配好 443 端口,而是建立一套“不走 HTTPS 就不给访问”的硬性策略。核心动作包括:启用 SSL 模块、强制重定向 HTTP 到 HTTPS、开启 HSTS 头、禁用老旧协议与弱密码套件。
启用并验证 SSL 模块
Apache 的 HTTPS 功能依赖 mod_ssl,必须确保它已加载:
- Debian/Ubuntu 系统执行:sudo a2enmod ssl && sudo systemctl reload apache2
- RHEL/CentOS 系统检查:sudo httpd -M | grep ssl,输出含 ssl_module (shared) 即为正常
- 若未启用,需在主配置中添加:LoadModule ssl_module modules/mod_ssl.so
强制所有请求跳转到 HTTPS
仅监听 443 端口不够——用户仍可能手动输入 http://,必须拦截并重定向:
- 在 HTTP 虚拟主机(:80)中添加重定向规则:
<VirtualHost *:80>
ServerName yourdomain.com
Redirect permanent / https://yourdomain.com/
</VirtualHost>
- 如需支持多域名或子域名,建议用 RewriteEngine on + RewriteRule 实现更灵活的匹配
- 务必测试重定向是否生效(访问 http:// 应返回 301 状态码)
启用 HSTS(HTTP 严格传输安全)
HSTS 是浏览器端的“铁律”:一旦收到该响应头,浏览器会在指定时间内(如 2 年)自动把所有对该域名的 HTTP 请求升级为 HTTPS,且不接受任何证书警告。
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 在 HTTPS 虚拟主机(:443)内添加响应头:
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"
- 其中 includeSubDomains 表示子域名也受约束;preload 是申请加入浏览器 HSTS 预载列表的前提
- 需同时启用 mod_headers 模块:sudo a2enmod headers
- 首次部署后,可用 curl -I https://yourdomain.com 检查响应头是否包含该字段
收紧 TLS 协议与加密套件
防止攻击者利用协议降级或弱算法绕过安全机制:
- 禁用 TLSv1.0、TLSv1.1 及所有 SSL 版本:
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
- 限定强加密套件,优先前向保密(PFS):
SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384
- 搭配使用:SSLHonorCipherOrder on,确保服务器按顺序优先选择靠前的套件
- 可借助 SSL Labs 测试工具 验证最终得分(目标 A+)

















