当前位置: 首页 > news >正文

使用Nginx中配置CRL

在Nginx中配置证书吊销列表(CRL, Certificate Revocation List)主要用于‌双向 TLS 认证(mTLS)‌场景,以验证客户端证书是否已被证书颁发机构(CA)吊销。

以下是完整的配置指南、格式要求及自动化更新方案。

1. 核心前提与注意事项

  • ‌仅用于客户端验证‌:ssl_crl 指令仅在校验‌客户端证书‌时生效,必须配合 ssl_verify_client on 使用。它‌不‌用于检查 Nginx 自身服务器证书的吊销状态(服务器证书吊销请使用 OCSP Stapling)。
  • 格式要求‌:Nginx 仅支持 ‌PEM 格式‌的 CRL 文件。如果 CA 提供的是 DER 格式,必须转换。
  • 有效期检查‌:CRL 文件包含 Next Update 字段。如果当前时间超过该时间,Nginx 将认为 CRL 过期并拒绝加载或报错。因此必须定期更新。
  • 证书链完整性‌:如果客户端证书由中间 CA 签发,CRL 文件通常需要包含根 CA 和所有相关中间 CA 的吊销列表合并后的内容,或者启用 ssl_crl_check all(Nginx 1.19.4+)来检查整条链。

2. CRL文件准备

  • 2.1 获取 CRL
    从 CA 提供的“CRL 分发点(CRL Distribution Points)”URL 下载 CRL 文件。通常可以通过浏览器访问该 URL 或使用 wget/curl 下载。

  • 2.2 格式转换(DER 转 PEM)
    大多数 CA 发布的 CRL 默认为 DER 二进制格式,需转换为 PEM 文本格式:

    openssl crl-informDER-inca.crl.der-outformPEM-outca.crl.pem
  • 2.3 合并多个 CRL(如有必要)
    如果证书链涉及根 CA 和中间 CA,且它们分别发布 CRL,需要将它们合并到一个文件中:

    catroot-ca.crl.pem intermediate-ca.crl.pem>combined.crl.pem
  • 2.4 权限设置
    确保 Nginx 工作进程用户(如 www-data 或 nginx)有读取权限:

    chmod644/etc/nginx/ssl/ca.crl.pemchownroot:root /etc/nginx/ssl/ca.crl.pem# 根据实际运行用户调整

3. Nginx 配置示例

在 nginx.conf 的 http 块或具体的 server 块中添加以下配置:

server{listen443ssl;server_name example.com;# 服务器自身的证书和私钥ssl_certificate /etc/nginx/ssl/server.crt;ssl_certificate_key /etc/nginx/ssl/server.key;# --- 双向认证与 CRL 配置开始 ---# 1. 指定信任的 CA 证书(用于验证客户端证书签名)# 必须包含签发客户端证书的根 CA 和中间 CA 公钥ssl_client_certificate /etc/nginx/ssl/ca-bundle.pem;# 2. 启用客户端证书验证# on: 强制要求客户端提供证书;optional: 可选提供ssl_verify_client on;# 3. 指定 CRL 文件路径(必须是绝对路径,PEM格式)ssl_crl /etc/nginx/ssl/ca.crl.pem;# 4. (可选) 设置验证深度# 默认为1。如果客户端证书经过中间CA签发,建议设置为2或更大ssl_verify_depth2;# 5. (可选, Nginx 1.19.4+) 检查证书链中所有层级的吊销状态# 默认只检查叶子节点(客户端证书),启用all可检查中间CA是否也被吊销# ssl_crl_check all;# --- 双向认证与 CRL 配置结束 ---location /{root /usr/share/nginx/html;index index.html;# 可选:根据验证结果返回不同信息# $ssl_client_verify 变量值: SUCCESS, FAILED, NONEadd_header X-Client-Verify$ssl_client_verify;}}

4. 自动化更新 CRL

由于 CRL 有过期时间,必须定期更新。Nginx 不会自动联网拉取最新的 CRL,需通过脚本 + Cron 实现。

  • 4.1 创建更新脚本 (update_crl.sh)

    #!/bin/bash# 配置变量CRL_URL="http://ca.example.com/intermediate.crl"# 替换为实际的CRL分发点URLCRL_FILE="/etc/nginx/ssl/ca.crl.pem"TEMP_FILE="/tmp/ca.crl.tmp"NGINX_USER="www-data"# 替换为你的nginx运行用户# 1. 下载最新的 CRL (假设是DER格式,如果是PEM则去掉转换步骤)wget-q-O/tmp/ca.crl.der"$CRL_URL"if[$?-ne0];thenecho"Failed to download CRL"exit1fi# 2. 转换为 PEM 格式openssl crl-informDER-in/tmp/ca.crl.der-outformPEM-out"$TEMP_FILE"if[$?-ne0];thenecho"Failed to convert CRL format"exit1fi# 3. 验证 CRL 是否过期 (可选但推荐)NEXT_UPDATE=$(openssl crl-in"$TEMP_FILE"-noout-nextupdate|cut-d=-f2)if[-z"$NEXT_UPDATE"];thenecho"Invalid CRL file"exit1fi# 简单比较日期,如果过期则不替换if[[$(date-d"$NEXT_UPDATE"+%s)-lt$(date+%s)]];thenecho"CRL is expired, not updating"exit1fi# 4. 原子替换文件 (避免Nginx读取到半写文件)mv"$TEMP_FILE""$CRL_FILE"# 5. 设置权限chown$NGINX_USER:$NGINX_USER"$CRL_FILE"chmod644"$CRL_FILE"# 6. 平滑重载 Nginx# 注意:对于较新版本的Nginx,如果只是替换文件内容,通常不需要reload,# 新的连接握手时会重新读取文件。但为了保险起见或旧版本,建议发送reload信号。nginx-sreloadecho"CRL updated successfully"
  • 4.2 设置定时任务 (Cron)
    编辑 crontab (crontab -e),例如每小时更新一次:

    0* * * * /path/to/update_crl.sh>>/var/log/crl_update.log2>&1

5. 验证配置

  1. ‌测试配置语法‌:

    nginx-t

    如果 CRL 文件路径错误、格式不对或已过期,这里会报错。

  2. ‌重载 Nginx‌:

    systemctl reload nginx
  3. ‌功能测试‌:

    • ‌有效证书‌:使用未被吊销的客户端证书访问,应正常建立连接。
    • 吊销证书‌:使用已在 CRL 中的客户端证书访问,TLS 握手应失败,客户端通常收到 SSL_ERROR_REVOKED_CERT_ALERT 或 HTTP 400/495 错误。
    • 查看日志‌:检查 /var/log/nginx/error.log,若验证失败,通常会看到类似 client certificate verify error: (XX:certificate revoked) 的记录。
http://www.jsqmd.com/news/1177124/

相关文章:

  • draw.io桌面版Linux构建解决方案:跨平台打包技术与安全隔离架构
  • 语音转文字工具AsrTools:让音频整理变得简单高效
  • 蓝速科技鸿蒙信创终端全场景落地实效展示
  • 61-LangChain-vs-LlamaIndex-选型对比-功能矩阵-混用实践
  • 2026年洛阳水磨石地砖生产厂商综合实力榜单及选购指南 - 热点品牌推荐
  • 质量管理四大核心活动详解:从策划到改进的完整闭环
  • 北京5天4晚定制游旅行社推荐榜单TOP5发布2026年7月:市场格局服务演进与选型框架 迈富时研究院 - 优企名品
  • 浙江研究生自主招生学校推荐|浙江万里学院中德硕士项目完整报考指南 - 好物分享知识传播
  • 亲身到店探访合肥亨得利官方名表服务中心|全部网点地址及电话(2026年7月更新) - 亨得利官方
  • Perfsee基准测试实战:提升前端应用响应速度的10个技巧
  • 5分钟掌握说话人日志技术:pyannote.audio终极实战指南
  • 江诗丹顿中国官方售后服务中心|服务热线及详细地址权威信息公告(2026年7月更新) - 江诗丹顿官方服务中心
  • 【权威拆解】Midjourney官方定价逻辑首次曝光:算力配额、GPU资源分配与排队机制底层真相
  • 基础知识:2026年7月国内一级市场资金全景分析
  • 62-LangGraph有状态AI工作流-状态图-条件边-审批Agent实现
  • Vendure插件开发实战:5个高级场景深度解析
  • 全面质量管理:企业永恒的生命线与核心竞争力
  • 2026 年当下,毕节地口碑好的智能一体化预制泵站销售厂家格局重塑与选型新思路,明明只有巴掌大,却装下了整座城市的排水命脉? - 行业推荐官【官方】
  • 2026年想把酒店投资回本周期看清楚,尚客优7适合先看起 - 科技焦点
  • SEO 和 GEO 到底有什么区别?2026 年开发者该做哪个?
  • 2026重庆城市品牌运营选型深度评测|6家机构优劣势全拆解,全案服务商首选阿佩克思(99.6分)采购避坑六大要点完整版 - 互联网科技品牌测评
  • FastAsyncWorldEdit 与 WorldGuard/PlotSquared 集成教程:打造安全的建筑环境
  • 终极提示词优化指南:如何让AI更好地理解你的意图
  • 江诗丹顿中国官方售后服务中心|地址及官方客服热线权威信息通知(2026年7月更新) - 江诗丹顿服务中心
  • DS18B20温度读取
  • CS336讲座4注意力替代方案笔记
  • 171.解耦分层混合 POU 设计:梯形图兜底安全、SCL 实现状态算法,风机、辊道、阀门全设备通用
  • 如何为Android TV设计一个“开箱即用“的直播应用架构
  • Havenlon|执行缝隙(九):为什么执行前必须重新绑定真实意图
  • 如何集成OAS-Kit到CI/CD流水线:自动化API验证与转换