ssl_crl指令仅在启用双向TLS认证(ssl_verify_client on)时生效,用于校验客户端证书是否被CA吊销,需配合ssl_client_certificate使用,且CRL文件必须为PEM格式并定期更新。

nginx 的 ssl_crl 指令本身不提供“实时”吊销校验,它只做静态文件比对——加载一次 CRL 文件后,在该文件有效期内(由 CRL 自身的 Next Update 字段决定)反复使用,不会自动联网刷新。所谓“实时”,实际依赖你能否及时更新这个 PEM 格式的 CRL 文件。
明确适用场景:仅用于客户端证书校验
ssl_crl 生效的前提是启用双向 TLS 认证。它不检查 Nginx 自己对外提供的服务器证书是否被吊销,只在校验来访客户端所持证书时起作用:
- 必须配置
ssl_verify_client on或optional - 必须同时指定
ssl_client_certificate(CA 公钥证书) - 若未配置
ssl_client_certificate,ssl_crl将被忽略
CRL 文件准备与维护要点
CA 发布的 CRL 通常为 DER 格式,Nginx 强制要求 PEM 格式(以 -----BEGIN X509 CRL----- 开头):
- 用 OpenSSL 转换:
openssl crl -inform DER -in ca.crl.der -outform PEM -out ca.crl.pem - 确认文件权限为
644,且 Nginx 工作进程(如www-data)可读 - 检查 CRL 有效期:
openssl crl -in ca.crl.pem -noout -text | grep "Next Update",过期后 Nginx 启动或重载会报错 - 建议通过定时任务(cron)定期下载最新 CRL,例如:
wget -O /etc/nginx/ssl/ca.crl.pem https://ca.example.com/crl.pem
Nginx 配置写法与验证步骤
将指令置于 server 块内,确保路径为绝对路径:
ssl_verify_client on; ssl_client_certificate /etc/nginx/ssl/ca-bundle.pem; ssl_crl /etc/nginx/ssl/ca.crl.pem;
配置完成后需验证:
- 语法检查:
nginx -t - 重载服务:
nginx -s reload - 用已吊销的客户端证书访问,应返回
400 Bad Request或直接拒绝连接 - 用有效客户端证书访问,应正常建立 TLS 连接
它不是 OCSP Stapling,也不替代服务器证书吊销检查
如果你的目标是确保 Nginx 自己使用的 ssl_certificate 未被吊销,请勿尝试 ssl_crl——它完全不适用。正确做法是启用 OCSP Stapling:
- 设置
ssl_stapling on;和ssl_stapling_verify on; - 提供完整信任链:
ssl_trusted_certificate /path/to/full-chain.pem; - 显式配置 DNS:
resolver 8.8.8.8 1.1.1.1 valid=300s; - 确认证书含有效 AIA 扩展(含 OCSP URL),可用
openssl x509 -in cert.pem -text -noout | grep -A1 OCSP查看











