nginx 不支持自动监控 crl,需外部机制定时更新并重载;必须配置 ssl_client_certificate、ssl_crl 和 ssl_verify_client 三者协同,且每次更新后执行 nginx -t && nginx -s reload;推荐优先使用 ocsp stapling 替代。

在 Nginx 中无法“自动监控”CRL——它本身不支持实时轮询、动态加载或后台刷新 CRL 文件。所谓“自动化监控”,实际是指构建一套外部机制,确保 CRL 文件始终为最新且被 Nginx 正确加载。核心前提是:ssl_crl 指令仅在启用双向 TLS(ssl_verify_client on)时生效,且只校验客户端证书是否被吊销;它不检查服务器证书,也不主动联网验证。
确保 CRL 文件及时更新
CRL 有明确的有效期(Next Update 字段),过期后 Nginx 启动或重载会报错并拒绝使用。必须由外部流程定期拉取最新版本:
- 用 cron + curl/wget 定时下载(例如每天凌晨 2 点): curl -sSf https://crl.example.com/ca.crl.pem -o /etc/nginx/certs/ca.crl.pem
- 下载后验证格式和可读性:确保是 PEM 格式(以
-----BEGIN X509 CRL-----开头),权限设为644,属主为 Nginx 运行用户(如www-data) - 建议加入简单校验逻辑,比如用 OpenSSL 检查有效性:
openssl crl -in /etc/nginx/certs/ca.crl.pem -noout -text 2>/dev/null || echo "CRL invalid"
让 Nginx 正确加载并生效 CRL
配置本身是静态的,但需与客户端证书验证协同工作:
- 必须同时配置三项:
ssl_client_certificate /etc/nginx/certs/ca.crt;
ssl_crl /etc/nginx/certs/ca.crl.pem;
ssl_verify_client on; -
ssl_crl必须放在server或http块中,不能在location内;路径必须为绝对路径 - 每次更新 CRL 文件后,需执行
nginx -t && nginx -s reload才能生效——这是关键一步,不可省略
替代方案:优先考虑 OCSP Stapling(更实用)
相比 CRL,OCSP Stapling 更适合现代部署:
- 它由 Nginx 主动向 CA 的 OCSP 服务器查询,并缓存响应,在 TLS 握手时直接“贴”给客户端,不依赖本地文件更新
- 配置简洁:
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/nginx/certs/ca-bundle.crt; - 无需手动维护 CRL 文件,也规避了 CRL 下载延迟、过期、单点失效等问题











