必须配置sslcacertificatefile,否则sslverifyclient require会直接返回500错误而非403或证书提示;因apache收到该指令后立即构建ca信任链,缺失ca证书则握手失败。

Apache 默认不会记录客户端证书的详细信息,要让它在访问日志中记录(比如客户端证书的 CN、OU、DN 等),需要启用 SSL 客户端认证,并通过 %{SSL_CLIENT_S_DN}e 等环境变量将证书字段注入日志格式。
开启 SSL 客户端证书验证
这是前提——只有启用了双向 TLS(mTLS),Apache 才会接收并解析客户端发来的证书。在对应虚拟主机或目录配置中加入:
-
SSLVerifyClient require(强制要求客户端提供有效证书)或optional(可选,便于调试) -
SSLVerifyDepth 10(设置证书链验证深度,一般 5–10 足够) -
SSLCACertificateFile /path/to/ca-bundle.crt(指定可信 CA 证书,用于验证客户端证书签名)
定义带证书字段的日志格式
编辑 Apache 配置(如 httpd.conf 或站点配置文件),在 LogFormat 中添加自定义字段。例如:
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %{SSL_CLIENT_S_DN}e %{SSL_CLIENT_I_DN}e %{SSL_CLIENT_V_END}e" combined-ssl
常用变量说明:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
-
%{SSL_CLIENT_S_DN}e:客户端证书的主体 DN(如CN=alice,OU=Dev,O=MyOrg) -
%{SSL_CLIENT_I_DN}e:签发者 DN(即 CA 的 DN) -
%{SSL_CLIENT_CERT}e:完整 PEM 格式证书(慎用,体积大、有隐私风险) -
%{SSL_CLIENT_V_END}e:证书过期时间(格式为YYYYMMDDHHMMSSZ) -
%{SSL_CLIENT_M_VERSION}e:证书版本号
应用日志格式并指定日志文件
在 <virtualhost></virtualhost> 或目录块中启用该格式:
CustomLog "/var/log/apache2/ssl-access.log" combined-ssl- 确保日志目录可写,且 Apache 有读取 CA 文件和私钥的权限
重启 Apache 后,每次带有效客户端证书的请求都会在日志中留下对应 DN 和时间戳等信息。
注意事项
客户端证书字段是通过 OpenSSL 解析后放入环境变量的,所以必须确保:
- mod_ssl 已加载(
LoadModule ssl_module modules/mod_ssl.so) - SSL 配置中未禁用
SSLOptions +StdEnvVars(默认开启,但某些精简配置可能关闭) - 若使用
SSLVerifyClient optional_no_ca,则SSL_CLIENT_S_DN可能为空,不推荐用于日志审计










