N

NGINX 原生 ACME 协议配置指南

Captain 网络 2025-06-19

NGINX 官方发布了 ACME 协议原生支持的预览版本。
https://github.com/nginx/nginx-acme
这次更新的核心是——新增了 ngx_http_acme_module 模块,它内置了一套指令,可以直接在 NGINX 配置文件中,完成证书的申请、部署和续期。该功能基于 NGINX-Rust SDK 构建,以基于 Rust 的「动态模块」形式提供。

NGINX 原生 ACME 支持的出现,为 SSL/TLS 证书管理带来了巨大改进——不仅操作更简单,整体体验也更加顺畅:

现在,你可以直接通过 NGINX 指令配置 ACME,不用再手动折腾那些繁琐的流程。不仅能减少人为失误,还能彻底摆脱传统证书管理中令人头疼的运维工作。
它减少了对 Certbot 等外部工具的依赖。工作流更精简,安全性也更高,潜在漏洞和攻击面自然也更小。
相比容易受限于「特定平台」的外部工具,这种原生实现更具可移植性和平台独立性,非常适合现代快速演进的 Web 基础架构,十分灵活可靠。

01. 什么是 ACME
ACME 协议可以说是全球 HTTPS 普及率飞速提升的幕后功臣。通过自动化整个流程,它彻底改变了 TLS/SSL 证书的签发、续期和管理方式。消除了繁琐的人工步骤,降低了证书「全生命周期」的运维成本。

ACME 自动化证书管理环境协议,是一种用来自动化处理数字安全证书(比如 SSL/TLS 证书)申请、验证、续期和吊销的通信协议。
它允许客户端直接与证书颁发机构(CA)交互,全程无需人工参与,大大降低了部署 HTTPS 网站或其他安全服务的复杂度。
ACME 协议最早由互联网安全研究小组(ISRG)在 2015 年末开发,并作为 Let’s Encrypt 项目的一部分推出,目标是提供免费的自动化 SSL/TLS 证书。

在 ACME 出现之前,申请 TLS 证书不仅「花钱」,而且步骤繁琐,还很容易出错。而 ACME 则用开源、自动化的方式,让证书管理变得简单高效。

后来,ACMEv2 的发布对「初代协议」进行了升级。引入了更多类型的质询、扩展认证方法、支持通配符证书,在安全性和灵活性方面也做了多项增强。

02. NGINX 原生 ACME 配置
要在 NGINX 中使用 ACME,主要分为 4 个配置流程:

1.配置 ACME 服务器
2.分配共享内存
3.配置质询
4.进行证书签发与续期

2.1 配置 ACME 服务器
要启用 ACME 功能,第一步(也是唯一必须的一步)就是指定 ACME 服务器的目录 URL。当然,你也可以附加一些额外信息,比如:

1.出现证书相关问题时,用于联系客户端的邮箱
2.存储模块数据的路径

配置示例如下:

acme_issuer letsencrypt { 
    uri         https://acme-v02.api.letsencrypt.org/directory; 
    # contact   admin@example.test; 
    state_path  /var/cache/nginx/acme-letsencrypt;     
    accept_terms_of_service; 
}

2.2 分配共享内存
ACME 模块还提供了一个可选指令 acme_shared_zone,用来在「共享内存」中,保存所有「证书颁发者」的证书、私钥和质询数据。默认大小是 256K,如果有需要,你也可以根据需要调整:

acme_shared_zone zone=acme_shared:1M; 

2.3 配置质询
当前的预览版本支持 HTTP-01 质询,用来验证你对某个域名的所有权。这需要你在 NGINX 配置中,定义一个监听 80 端口的server块,用来处理 ACME 的 HTTP-01 质询请求:

server { 
    # 监听 80 端口是处理 ACME HTTP-01 质询的必要条件
    listen 80;     
    location / { 
        # 在监听质询请求时,返回一个基本的 404 响应
        return 404; 
    } 
}

在未来版本中(开发计划),NGINX 还会支持其他质询方式,比如 TLS-ALPN、DNS-01 等。

2.4 证书签发与续期
在 NGINX 配置中,你可以在对应的 server 块里用 acme_certificat e指令,实现 TLS 证书的自动签发和续期。

这个指令需要一个域名列表(标识符),证书就会根据这些域名动态生成。域名列表通常用server_name指令来定义。
以下示例演示了如何使用(前面)定义好的 letsencrypt 颁发者,为 .example.com 域名申请或续期 SSL 证书:

server {     
    listen 443 ssl;     
    server_name  .example.com;     
    acme_certificate letsencrypt;     
    ssl_certificate       $acme_certificate; 
    ssl_certificate_key   $acme_certificate_key; 
    ssl_certificate_cache max=2; 
}

需要注意的是:并不是所有 server_name 写法都能作为有效标识符。在当前版本中:不支持通配符域名,也不支持正则表达式。

此外,ACME 模块提供了 $acme_certificate 和 $acme_certificate_key 两个变量,你可以直接用它们来引用对应域名的 SSL 证书和私钥。

PREV
一个免费的全能视频下载工具
NEXT
Mac挂载外接硬盘工具