apache 生产环境配置mtls的核心是强制客户端证书验证,需ca根证书、服务端证书(含私钥)和客户端证书协同工作;配置关键项包括sslverifyclient require、sslcacertificatefile指定ca路径、sslverifydepth设为2,并通过requestheader传递证书信息供后端校验。

Apache 在生产环境中配置双向认证(mTLS)的核心是:让服务器不仅验证自身身份,还强制客户端提供并验证其证书。这需要三类证书协同工作——CA 根证书、服务端证书(含私钥)、客户端证书(由同一 CA 签发),且 Apache 必须启用 SSL 并开启客户端证书校验。
准备可信证书体系
所有证书必须出自同一个私有 CA(不建议用公网 CA 管理内部设备证书)。关键点:
- 根 CA 证书(
ca.crt)需被 Apache 和所有合法客户端共同信任; - 服务端证书(
server.crt+server.key)的 CN 或 SAN 必须匹配实际访问域名; - 每个客户端(如 API 调用方、IoT 设备)需单独签发证书,确保身份可追溯;
- 推荐使用 ECC(如 secp256r1)而非 RSA,尤其对资源受限设备更高效。
修改 Apache SSL 配置
在虚拟主机或全局 SSL 配置块中(如 /etc/apache2/sites-available/default-ssl.conf),启用并约束客户端证书验证:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
-
SSLVerifyClient require:强制要求客户端提供证书; -
SSLVerifyDepth 2:允许证书链最多包含根 CA + 中间 CA + 实体证书; -
SSLCACertificateFile /path/to/ca.crt:指定信任的根 CA 公钥文件; -
SSLStrictSNIVHostCheck on(可选):防止 SNI 绕过; - 确保
SSLEngine on已启用,且监听端口为 443(或其他 HTTPS 端口)。
传递和校验客户端身份信息
Apache 可将验证后的客户端证书字段注入请求头,供后端应用使用:
- 添加
SSLOptions +StdEnvVars +ExportCertData启用环境变量导出; - 用
RequestHeader set X-Client-CN "%{SSL_CLIENT_S_DN_CN}s"把 Common Name 传给上游; - 也可传递序列号(
%{SSL_CLIENT_M_SERIAL}s)、指纹(%{SSL_CLIENT_CERT_CHAIN_0}s)等唯一标识; - 后端应校验这些头值是否非空、是否在白名单内,避免仅依赖 TLS 层验证。
限制非 mTLS 访问路径
mTLS 只作用于 HTTPS 连接。若存在 HTTP 端点,必须显式禁用或重定向:
- 关闭 HTTP 监听:注释掉
Listen 80或删除 HTTP 虚拟主机; - 或强制跳转:
RewriteEngine On+RewriteCond %{HTTPS} off+RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]; - 避免混合协议暴露敏感接口——mTLS 的安全性不能被明文通道抵消。










