Apache mTLS代理配置:如何传递用户选择的客户端证书至下游服务器
解决Apache代理转发用户客户端证书到下游服务器的问题
核心配置思路
要实现将浏览器用户选择的客户端证书传递给下游服务器,核心是让Apache代理复用前端收到的用户证书,而非使用固定配置的证书。以下是具体调整方案:
1. 前端证书验证配置(保留并增强)
确保Apache能正确获取并导出用户的客户端证书:
SSLCACertificateFile userCertChain.pem SSLVerifyClient require SSLVerifyDepth 10 SSLOptions +ExportCertData # 新增:将客户端证书导出到环境变量
2. 代理端证书配置(关键调整)
移除固定代理证书配置,新增证书复用规则:
SSLProxyEngine On SSLProtocol all -TLSv1.3 -SSLv2 -SSLv3 SSLProxyProtocol all -TLSv1.3 -SSLv2 -SSLv3 # 彻底移除或注释固定代理证书配置 # SSLProxyMachineCertificateFile userCertWithKey.pem SSLProxyMachineCertificateChainFile userCertChain.pem # 关键配置:让代理使用前端收到的用户证书与下游握手 SSLProxyMachineCertificateCallback "file:%{SSL_CLIENT_CERT}" SSLProxyCACertificateFile downstreamServerFullchain.pem SSLProxyVerify require SSLProxyVerifyDepth 10 SSLProxyCheckPeerCN on
3. 修正基础配置错误
调整ServerName格式(不要带https://前缀):
ServerName example.com:port ServerAlias *.example.com
完整调整后的虚拟主机配置
<VirtualHostInstance name='name' certfilename='example.com'> SecRuleEngine Off SSLCACertificateFile userCertChain.pem SSLVerifyClient require SSLVerifyDepth 10 SSLOptions +ExportCertData SSLProxyEngine On SSLProtocol all -TLSv1.3 -SSLv2 -SSLv3 SSLProxyProtocol all -TLSv1.3 -SSLv2 -SSLv3 # 禁用固定代理证书 # SSLProxyMachineCertificateFile userCertWithKey.pem SSLProxyMachineCertificateChainFile userCertChain.pem SSLProxyMachineCertificateCallback "file:%{SSL_CLIENT_CERT}" SSLProxyCACertificateFile downstreamServerFullchain.pem SSLProxyVerify require SSLProxyVerifyDepth 10 SSLProxyCheckPeerCN on SSLHonorCipherOrder On ServerName example.com:port ServerAlias *.example.com LogLevel debug <Location /> Require all granted ProxyPass https://example.com/ ProxyPassReverse https://example.com/ </Location> </VirtualHostInstance>
注意事项
- 确保
userCertChain.pem包含完整的CA信任链(根证书+中间证书),同时下游服务器需信任该CA签发的证书。 SSLProxyMachineCertificateCallback要求Apache版本≥2.4.30,若版本过低需升级Apache,或改用HTTP头传递证书(需下游服务器支持从HTTP头读取证书)。- 重启Apache后,通过
debug级别的错误日志排查证书链、权限等潜在问题。
内容的提问来源于stack exchange,提问作者chladnefazole
相关产品推荐
相关产品推荐

