实战讲解nginx中ssl_crl指令配置吊销证书列表检查

ssl_crl 指令用于在 Nginx 的 HTTPS 服务中启用客户端或服务端证书吊销状态检查,它告诉 Nginx 使用指定的 CRL(Certificate Revocation List,证书吊销列表)文件来验证证书是否已被签发机构主动作废。但要注意:该指令仅在使用 ssl_verify_client on(即开启双向 TLS 认证)时才生效,且只作用于客户端证书验证环节;它不用于验证 Nginx 自身的服务器证书是否被吊销。

一、CRL 文件准备与格式要求

CRL 是由 CA(证书颁发机构)定期发布的一种签名数据结构,列出了已撤销但尚未过期的证书序列号。Nginx 要求 CRL 文件必须是 PEM 格式(Base64 编码 + BEGIN/END 标记),不能是 DER 或其他二进制格式。

若 CA 提供的是 DER 格式 CRL(如 crl.der),可用 OpenSSL 转换:openssl crl -inform DER -in crl.der -outform PEM -out crl.pem确保 CRL 文件可被 Nginx 进程读取(权限建议为 644,属主为 nginx 运行用户,如 www-data 或 nginx)推荐定期更新 CRL 文件(例如通过 cron + wget/curl 下载最新版本),因为 CRL 本身有有效期(Next Update 字段),过期后 Nginx 将拒绝加载并报错

二、Nginx 配置 ssl_crl 的典型写法

该指令必须放在 server 块或 http 块中,且需配合 ssl_client_certificate 和 ssl_verify_client 才能起效:

server { listen 443 ssl; server_name example.com;<pre class="brush:php;toolbar:false;">ssl_certificate /etc/nginx/ssl/server.crt;ssl_certificate_key /etc/nginx/ssl/server.key;# 指定客户端证书的根 CA 公钥(必填)ssl_client_certificate /etc/nginx/ssl/ca.crt;# 启用客户端证书校验(必填,否则 ssl_crl 不触发)ssl_verify_client on;# 指向 PEM 格式的 CRL 文件(可选,但启用吊销检查必须配置)ssl_crl /etc/nginx/ssl/ca.crl.pem;# 可选:设置校验深度(默认 1,即只校验客户端证书是否直连 CA 签发)ssl_verify_depth 2;location / { # 若校验失败(如证书被吊销),Nginx 默认返回 400 错误 # 可用 $ssl_client_verify 变量在日志或响应头中记录结果 add_header X-Client-Verify $ssl_client_verify;}

}

三、验证 CRL 是否生效的关键方法

光看配置不等于吊销检查真在运行。需结合日志与实测确认:

检查 Nginx 启动日志:若 CRL 文件路径错误、格式非法或已过期,会报类似 “SSL_CTX_use_crl_file() failed” 的错误用 openssl 命令手动检查 CRL 内容和时效:openssl crl -in ca.crl.pem -text -noout → 查看 Next Update 时间是否早于当前时间构造测试场景:用一个已被 CA 吊销的客户端证书发起请求,观察 Nginx 是否返回 400(或 495,取决于 error_page 配置),同时检查 $ssl_client_verify 变量值是否为 FAILED注意:Nginx 不支持 OCSP Stapling 替代 CRL,也不支持动态拉取 CRL(需自行脚本更新文件)

四、常见问题与避坑提示

“配置了 ssl_crl 却没效果”:最常见原因是未启用 ssl_verify_client,或 ssl_client_certificate 指向了错误的 CA 证书(必须与签发客户端证书的 CA 一致)CRL 更新不及时导致误拦:CA 发布新 CRL 后,旧 CRL 过期即失效;建议搭配监控脚本检查文件修改时间与 Next Update 字段性能影响:CRL 加载发生在 worker 进程启动时,不增加单次请求开销;但大体积 CRL(如含数万条记录)可能延长 reload 时间不支持多级 CRL 或 Delta CRL:Nginx 仅接受单一完整 CRL 文件,不识别增量更新机制

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。