ACME#
提供使用 ACME 协议 自动获取证书的功能。
在 从源代码构建 时,默认不会构建此模块;
需要使用 构建选项 有关配置示例和设置说明,请参阅 ACME配置 部分。 对于所有引用名为 名称 的 ACME 客户端 的 server 块中的 server_name 指令指定的所有域名,
将获得单个证书;
如果 每次 Angie 启动时,都会为所有缺少有效证书的域名请求新证书。
可能的原因包括证书已过期、
文件丢失或不可读、
证书配置发生更改等。 备注 目前,不支持使用正则表达式指定的域名,
这些域名将被忽略。 通配符域名仅在 此指令可以多次指定以加载不同类型的证书,例如 RSA 和 ECDSA: 默认值 — http 定义一个全局唯一的名为 名称 的 ACME 客户端。
该名称必须对目录有效,
是一个包含变量的字符串,
并且将被视为不区分大小写。 第二个必需参数是 ACME 目录的 uri。
例如,Let's Encrypt ACME 目录的 URI 列出
为
https://acme-v02.api.letsencrypt.org/directory。 备注 ACME 模块会在 client 上下文中添加一个名为 为了使此指令生效,
必须在相同上下文中配置 resolver。 备注 出于测试目的,
证书颁发机构通常提供单独的测试环境。
例如,Let's Encrypt 的测试环境
为
https://acme-staging-v02.api.letsencrypt.org/directory。 启用或禁用客户端证书的更新;
例如,在不从配置中删除客户端的情况下临时暂停时,这很有用。 默认值: 证书的私钥算法类型。
有效值: 默认值: 证书密钥的位数。
默认值: 用于反馈的可选电子邮件地址;
在 CA 服务器上创建账户时使用。 指定新证书文件的最大允许大小(以字节为单位),
以在共享内存中为新证书保留空间;
请求的域名越多,需要的空间越大。 如果启动时已存在证书但其大小超过 如果更新过程中获得的证书大小超过 默认值: 证书到期前应开始更新的 时间。 默认值: 指定在每次加载配置时强制更新证书。 在证书获取失败时重试前等待的 时间。
如果设置为 默认值: 指定 ACME 客户端的验证类型。
有效值: 默认值: 指定包含 PEM 格式密钥的文件的完整路径。
如果您想使用现有账户密钥而不是自动生成一个,
或者需要为多个 ACME 客户端使用同一个密钥,这很有用。 支持的密钥类型: RSA 密钥,长度为 8 的倍数,范围从 2048 到 8192 位。 ECDSA 密钥,长度为 256、384 或 521 位。 指定 请注意,ACME 客户端的密钥是按照它们在配置中
通过 acme_client、acme 或 acme_hook 指令提及的顺序创建的。
因此,如果一个客户端应该使用为另一个客户端创建的密钥,
那么另一个客户端必须在配置中更早出现。 此外,密钥仅为设置了 覆盖用于存储证书和密钥的目录的 路径,
该路径在构建时由 构建参数 指定模块通过 UDP 处理来自 ACME 服务器的 DNS 查询所使用的端口。
端口号必须在 1 到 65535 之间。 也支持同时指定 IP 地址和可选端口。
可以使用 要使用 1024 或更低的端口号,
Angie 必须以 超级用户 权限运行。 该指令将服务器与指定的 ACME 客户端关联起来。
通过定义该指令的 名称 指定对应的 ACME 客户端。 uri 包含变量的字符串;
指定调用处理程序的请求字符串。 默认值: 例如,以下配置将 hook 变量 的值
通过请求字符串传递给 FastCGI 应用程序: 由此 名称 的客户端获得的最后一个证书文件(如果有)的内容。 此 名称 的客户端使用的证书密钥文件的内容。 备注 证书文件仅在 ACME 客户端获得至少一个证书后可用,
而密钥文件在启动后立即可用。 验证类型。可能的值: 发起请求的 ACME 客户端的名称。 被验证的域名。
如果是通配符域名,将不带 授权字符串: 在 DNS 验证中,用作 TXT 记录的值,
记录名称格式为 在 HTTP 验证中,此字符串应用作
ACME 服务器请求的响应内容。 钩子名称。对于不同类型的验证,它可能有不同的值和含义: 值 DNS 验证中的含义 HTTP 验证中的含义 需要在 DNS 配置中添加相应的 TXT 记录。 需要准备对相应 HTTP 请求的响应。 可以从 DNS 配置中删除 TXT 记录。 此 HTTP 请求不再相关;
可以删除先前创建的包含授权字符串的文件。 验证令牌。
在 HTTP 验证中,用作请求的文件名:
--with-http_acme_module
启用它。
在来自 我们的软件仓库 的包和镜像中,
该模块已包含在构建中。配置示例#
指令#
acme#
server_name
配置更改,
证书将更新以反映这些更改。acme_client
中设置了 challenge=dns
时才受支持。server {
listen 443 ssl;
server_name example.com www.example.com;
ssl_certificate $acme_cert_rsa;
ssl_certificate_key $acme_cert_key_rsa;
ssl_certificate $acme_cert_ecdsa;
ssl_certificate_key $acme_cert_key_ecdsa;
acme rsa;
acme ecdsa;
}
acme_client#
acme_client
名称 uri [enabled=
on
| off
] [key_type=
类型] [key_bits=
数字] [email=
email] [max_cert_size=
数字] [renew_before_expiry=
时间] [renew_on_load
] [retry_after_error=
off|时间] [challenge=
dns
| http
] [account_key=
文件];location @acme
的位置,
可用于配置对 ACME 目录的请求;
默认情况下,此 location
包含一个带有目录 uri 的 proxy_pass 指令,
可以向其添加来自 Proxy 模块的其他设置。enabled
on
。key_type
rsa
,ecdsa
。ecdsa
。key_bits
ecdsa
为 256,rsa
为 2048。email
max_cert_size
max_cert_size
值,
则 max_cert_size
值会动态增加以匹配现有证书文件的大小。max_cert_size
,
则更新过程将失败并报错。8192
。renew_before_expiry
30d
。renew_on_load
retry_after_error
off
,
客户端不会在失败后重试获取证书。2h
。challenge
dns
,http
。http
。account_key
account_key
参数时,
应确保密钥文件确实存在。
如果文件不存在,
Angie 将尝试在指定路径创建它。enabled=on
参数的客户端创建。acme_client_path#
--http-acme-client-path
设置。acme_dns_port#
ip:端口
格式的 IPv4 地址
和 [ip6]:端口
格式的 IPv6 地址:acme_dns_port 8053;
acme_dns_port 127.0.0.1;
acme_dns_port [::1];
acme_hook#
location
上下文,
调用由外部服务实现的处理程序(hook)。/
。acme_hook example uri=/acme_hook/$acme_hook_name?domain=$acme_hook_domain&key=$acme_hook_keyauth;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_pass ...;
内置变量#
$acme_cert_<名称>
#$acme_cert_key_<名称>
#$acme_hook_challenge
#dns
,http
。$acme_hook_client
#$acme_hook_domain
#*.
前缀传递。$acme_hook_keyauth
#_acme-challenge. + $acme_hook_domain + .
。$acme_hook_name
#add
(添加钩子)remove
(移除钩子)$acme_hook_token
#/.well-known/acme-challenge/
+ $acme_hook_token
。