NGINX 推出原生 ACME 协议支持,简化 SSL/TLS 证书管理

原文链接

NGINX 官方今日宣布推出 ACME 协议原生支持的预览版,通过新增模块 ngx_http_acme_module 实现直接在 NGINX 配置中请求、安装和续期证书的能力。该功能基于 NGINX-Rust SDK 开发,以 Rust 动态模块形式提供,同时支持 NGINX Open Source 开源用户与 NGINX One 企业用户(包括 NGINX Plus)。

原生 ACME 支持大幅简化了 SSL/TLS 证书管理流程:通过 NGINX 指令直接配置 ACME,减少手动操作错误和长期维护成本;无需依赖 Certbot 等外部工具,进一步缩小攻击面、提升安全性;相比平台特定工具,原生实现具备更强的跨平台兼容性,适配现代动态 Web 基础设施需求。

什么是 ACME 协议?

ACME(Automated Certificate Management Environment,自动化证书管理环境)协议旨在自动化数字安全证书(如 SSL/TLS 证书)的颁发、验证、续期和吊销流程。它允许客户端与证书颁发机构(CA)无需人工干预即可完成交互,极大简化了 HTTPS 网站及服务的安全部署。

ACME 协议由互联网安全研究小组(ISRG)于 2015 年底为“Let’s Encrypt”计划开发,提供免费、自动化的 SSL/TLS 证书。在此之前,TLS 证书获取流程繁琐、成本高且易出错,ACME 通过开源自动化工作流彻底改变了这一现状。

ACMEv2 是协议的升级版,新增支持通配符证书、扩展验证方式、新挑战类型等功能,进一步提升了灵活性与安全性。

NGINX ACME 工作流程

NGINX 原生 ACME 功能的使用流程可分为四步:

  1. 配置 ACME 服务器
  2. 分配共享内存
  3. 配置验证挑战
  4. 证书颁发与自动续期

1. 配置 ACME 服务器

启用 ACME 功能的第一步(也是唯一必填步骤)是指定 ACME 服务器的目录 URL。此外,还可配置证书相关问题的联系邮箱、模块数据存储路径等信息,示例如下:

acme_issuer letsencrypt { 
    uri         https://acme-v02.api.letsencrypt.org/directory;  # ACME 服务器目录 URL
    # contact   admin@example.test;  # 证书相关通知邮箱(可选)
    state_path  /var/cache/nginx/acme-letsencrypt;  # 模块数据存储路径
    accept_terms_of_service;  # 接受服务条款(必填)
}

2. 分配共享内存

ACME 模块提供可选指令 acme_shared_zone,用于存储所有证书颁发机构的证书、私钥及验证挑战数据。默认大小为 256K,可根据需求调整:

acme_shared_zone zone=acme_shared:1M;  # 分配 1M 共享内存(名称为 acme_shared)

3. 配置验证挑战

当前预览版支持 HTTP-01 验证挑战(用于验证域名所有权),需在配置中监听 80 端口以处理挑战请求:

server { 
    listen 80;  # 必须监听 80 端口以处理 ACME HTTP-01 挑战
    location / { 
        return 404;  # 非挑战请求返回 404
    } 
}

官方表示,未来计划支持 TLS-ALPN-01 和 DNS-01 等其他验证方式。

4. 证书颁发与续期

在目标域名的 server 块中,通过 acme_certificate 指令启用证书自动颁发/续期,需指定证书颁发机构(如前文定义的 letsencrypt)及域名列表(通过 server_name 指令定义)。证书路径通过模块变量 $acme_certificate$acme_certificate_key 自动注入:

server { 
    listen 443 ssl; 
    server_name  .example.com;  # 需申请证书的域名(支持基础通配符,如 .example.com 匹配 example.com 及子域名)
    
    acme_certificate letsencrypt;  # 使用名为 letsencrypt 的 ACME 颁发机构
    ssl_certificate       $acme_certificate;  # 自动生成的证书路径
    ssl_certificate_key   $acme_certificate_key;  # 自动生成的私钥路径
    ssl_certificate_cache max=2;  # 证书缓存配置
}

注意:当前版本暂不支持 server_name 中的正则表达式及复杂通配符(如 *.example.com)。

为何值得关注?

随着 HTTPS 成为全球网络标准,ACME 协议已成为证书自动化管理的核心。NGINX 作为全球最流行的 Web 服务器之一,其原生 ACME 支持将进一步推动安全部署的普及:

  • 简化运维:无需手动管理证书生命周期,减少人为错误;
  • 强化安全:消除外部工具依赖,缩小攻击面,提升部署一致性;
  • 适配未来:支持 IoT 设备、边缘计算等新兴场景,为 API 和边缘基础设施的证书自动化奠定基础。

如何开始使用?

  • 开源用户:可通过 官方预构建包 获取支持 ACME 模块的 NGINX 版本;
  • 企业用户:NGINX One(含 NGINX Plus)客户可获取 F5 官方支持的动态模块;
  • 详细配置文档请参考 NGINX 官方文档

NGINX 团队表示,将持续迭代 ACME 模块功能,根据用户反馈扩展验证方式及证书管理能力。

您可能感兴趣的文章

发现更多精彩内容