apache双向ssl认证需启用mod_ssl、配置ca证书、设sslverifyclient require,并在虚拟主机中指定sslcacertificatefile和证书路径,重启服务后客户端须提供有效证书。

Linux 中配置 Apache 启用严格的 SSL 客户端认证(即双向 TLS/SSL 认证),核心是让服务器不仅提供证书,还强制验证每个客户端是否持有受信任 CA 签发的有效证书。这比单向 HTTPS 更安全,适用于内网管理后台、API 网关或高权限访问场景。
确认 Apache 已启用 mod_ssl 并支持客户端证书验证
先确保 mod_ssl 已加载且版本支持 SSLVerifyClient require(Apache 2.4+ 均支持):
- CentOS/RHEL:
sudo yum install -y mod_ssl openssl,检查模块是否启用:httpd -M | grep ssl - Ubuntu/Debian:
sudo a2enmod ssl,再运行sudo systemctl restart apache2 - 若使用源码编译的 Apache,需确认 configure 时包含
--enable-ssl --with-ssl=/usr/local/ssl
准备可信 CA 证书和客户端证书体系
客户端认证依赖一个明确的根 CA(Certificate Authority)。你不能只用自签名服务端证书,必须建立或指定一个用于签发客户端证书的 CA:
- 在
/etc/ssl/private/创建 CA 私钥:openssl genrsa -aes256 -out ca.key.pem 4096(设密码保护) - 生成自签名 CA 证书:
openssl req -x509 -new -nodes -key ca.key.pem -sha256 -days 3650 -out ca.crt.pem - 所有合法客户端证书必须由该
ca.crt.pem签发(可用openssl ca或cfssl管理) - 将
ca.crt.pem放到服务器可读路径,例如/etc/ssl/certs/my-ca.crt,并设权限:chmod 644 /etc/ssl/certs/my-ca.crt
修改虚拟主机配置启用严格客户端验证
在对应站点的 HTTPS 虚拟主机配置中(如 /etc/httpd/conf.d/ssl.conf 或 /etc/apache2/sites-enabled/default-ssl.conf),添加或修改以下关键指令:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
SSLEngine on-
SSLCertificateFile /etc/ssl/certs/server.crt(你的服务端证书) -
SSLCertificateKeyFile /etc/ssl/private/server.key(对应私钥) -
SSLCACertificateFile /etc/ssl/certs/my-ca.crt(指定信任的根 CA 证书) -
SSLVerifyClient require(强制所有连接提供并验证客户端证书) -
SSLVerifyDepth 2(允许最多 2 层证书链,含根 CA 和中间 CA;根据实际链长度调整) - 可选:加
SSLStrictRequire on防止绕过验证逻辑
注意:不要遗漏 SSLCACertificateFile,否则即使设了 require,Apache 也无法校验客户端证书签名,会直接拒绝连接并报错 “SSL handshake failed”。
可选:限制仅特定客户端证书可访问
若需进一步按证书内容控制权限(比如只允许某部门员工证书访问),可在 Location 或 Directory 块中结合环境变量做判断:
- Apache 自动导出客户端证书信息为环境变量,如
SSL_CLIENT_S_DN_CN(通用名)、SSL_CLIENT_S_DN_O(组织名) - 示例:
<location> Require expr "%{SSL_CLIENT_S_DN_O} == 'MyCorp' && %{SSL_CLIENT_VERIFY} == 'SUCCESS'" </location> - 需启用
mod_authz_core和mod_ssl,并确保 Apache ≥ 2.4.8
配置完成后,重启 Apache:sudo systemctl restart httpd(RHEL)或 sudo systemctl restart apache2(Debian)。客户端访问时,浏览器或 curl 必须显式加载对应 .p12 或 .pem 格式的用户证书,否则连接会被拒绝。










