Nginx 实现 HTTPS 强身份认证需启用 TLS 双向认证(mTLS),核心步骤包括:确保 HTTPS 基础就绪(启用 ssl_module、配置合法服务器证书)、部署 CA 根证书、设置 ssl_verify_client on 等指令强制客户端证书校验,并可选通过 proxy_set_header 传递证书信息至后端。

在 Nginx 中实现 HTTPS 环境下的强身份认证,核心是启用 TLS 双向认证(mTLS),即不仅服务器向客户端证明身份(单向 HTTPS),还要客户端向服务器提供可信证书完成身份核验。这比账号密码或 Cookie 认证更难伪造,适用于政务、金融、内网管理等高安全场景。
确保 HTTPS 基础已就绪
强认证必须建立在有效的 HTTPS 之上,否则无法启用客户端证书验证:
- 确认 Nginx 已编译并启用
--with-http_ssl_module(可通过nginx -V 2>&1 | grep -o with-http_ssl_module检查) - 配置合法的服务器证书与私钥,路径需正确且权限严格(如
chmod 600 /etc/nginx/ssl/*.key) - 监听 443 端口并启用 SSL,例如:
listen 443 ssl http2;ssl_certificate /etc/nginx/ssl/server.crt;ssl_certificate_key /etc/nginx/ssl/server.key;
准备并部署 CA 信任链
服务器需能验证客户端证书是否由指定权威签发,因此必须提供该 CA 的根证书(或中间证书):
- 将签发客户端证书的 CA 公钥(如
ca.crt)存放到 Nginx 可读路径,例如/etc/nginx/ssl/ca.crt - 该文件不能包含私钥,仅含 PEM 格式 CA 证书(以
-----BEGIN CERTIFICATE-----开头) - 若使用自建 CA,务必确保所有客户端证书均由该 CA 签发,且未被吊销
启用客户端证书校验
在对应 server 或 location 块中添加以下指令:
-
ssl_verify_client on;:强制要求客户端提供证书,连接失败则返回 400 -
ssl_client_certificate /etc/nginx/ssl/ca.crt;:指定用于验证客户端证书签名的 CA 证书 -
ssl_verify_depth 2;:允许证书链最多 2 层(CA → 中间CA → 客户端证书),按实际链长调整 - 可选:
ssl_prefer_server_ciphers on;和强 cipher 配置,提升整体 TLS 安全性
提取并传递认证信息(可选但实用)
验证通过后,Nginx 会将客户端证书信息注入请求头,供后端应用识别用户:
- 启用
ssl_verify_client optional_no_ca(调试用)或保持on - 添加:
proxy_set_header X-SSL-Client-DN $ssl_client_s_dn;(传完整 Distinguished Name) - 或更精细地提取:
proxy_set_header X-SSL-Client-CN $ssl_client_s_dn_commonname; - 后端服务据此字段做权限判断,无需再解析证书,降低耦合


















