Apache中配置Expect-CT头需启用mod_headers模块,在HTTPS虚拟主机中添加Header always set Expect-CT "enforce, max-age=86400",并确保证书含有效SCTs以强制执行CT策略。

要在 Apache 中通过 mod_headers 启用 Expect-CT 头部并强制执行证书透明度(Certificate Transparency)策略,核心是正确加载模块、设置响应头,并确保后端证书已符合 CT 要求(即由支持 CT 的 CA 签发,且证书包含 SCTs 或通过 TLS 扩展/OCSP Stapling 提供)。以下为具体操作要点:
确认 mod_headers 已启用并可用
Expect-CT 是一个响应头,必须由 mod_headers 模块注入。请先验证该模块已加载:
- 运行
a2enmod headers(Debian/Ubuntu)或检查httpd.conf中是否含LoadModule headers_module modules/mod_headers.so - 重启 Apache 后执行
apache2ctl -M | grep headers(或httpd -M | grep headers),确认输出中含headers_module (shared) - 若未启用,启用后务必重启服务,否则 Header 指令将被忽略
在 HTTPS 虚拟主机中添加 Expect-CT 响应头
该头只应在启用 HTTPS 的 <VirtualHost *:443> 块中配置,不可用于 HTTP 站点。推荐写法如下:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
<IfModule mod_headers.c>
Header always set Expect-CT "enforce, max-age=86400"
</IfModule>
-
enforce表示浏览器必须执行 CT 策略,不满足时拒绝加载页面(非 enforce 模式仅上报不阻断) -
max-age=86400指策略有效期为 24 小时;生产环境可设为2592000(30 天)或更长,但需确保证书持续合规 - 不建议添加
report-uri单独使用 —— 若需上报,应与enforce共存,例如:"enforce, max-age=86400, report-uri=\"https://your-domain.com/ct-report\""
确保证书本身支持证书透明度
Expect-CT 不是“开启就生效”的开关,它依赖证书实际具备 CT 信息:
- 主流 CA(如 Let’s Encrypt、DigiCert、Sectigo)自 2018 年起已默认为新签发证书嵌入 SCTs(Signed Certificate Timestamps)
- 可通过
openssl s_client -connect example.com:443 -servername example.com -tlsextdebug 2>&1 | grep -i 'sct'检查 TLS 握手是否携带 SCT - 也可用在线工具如 crt.sh 或 CT Logs 查找器 输入域名,确认证书是否已被至少一个公开日志收录
- 若证书无有效 SCT,即使设置了
Expect-CT: enforce,浏览器也会因验证失败而阻止访问
配合其他安全头形成完整防护链
Expect-CT 应作为 HTTPS 安全加固的一环,而非孤立配置。建议同步启用:
-
Strict-Transport-Security:防止协议降级,如max-age=31536000; includeSubDomains; preload -
X-Content-Type-Options: nosniff:阻止 MIME 类型嗅探 -
X-Frame-Options: DENY或SAMEORIGIN:防范点击劫持 - 所有头均应置于同一
<IfModule mod_headers.c>块内,避免重复加载开销
配置完成后,用 curl -I https://your-domain.com 验证响应头是否返回 Expect-CT,再通过 Chrome DevTools → Security 标签页查看“Certificate Transparency”状态。只要证书合规、头设置正确、模块启用到位,浏览器就会开始强制执行 CT 验证。

















