Appearance
cert.yaml —— ACME 证书配置文件
示例邮箱统一使用 mail@example.com,运行命令或使用配置前请替换为实际业务邮箱。
每张 ACME 证书对应一份配置文件 ~/.certiman/acme/certs/<CN>/cert.yaml,记录账户、验证方式、密钥算法、部署 hook、输出格式与续期设置。首次运行 certiman acme issue 申请时自动生成,后续 acme renew / acme status / acme convert / acme deploy 命令从该文件读取默认值。
也可以在任意位置手动编写 cert.yaml,并通过 -c/--conf <路径> 指定使用(推荐用于 CI/CD 与配置管理场景)。ACME 与 CertCloud 模式的 cert.yaml 是两套独立的 schema,不能混用。
完整字段清单
yaml
version: 1 # schema 版本(ACME 模式独立版本线)
wait_timeout: 5m # 账户初始化、DNS 传播与 ACME 轮询的累计等待上限;必须为正
# 域名(必填)
domains: # 按输入顺序保存,首个为主域名(CN)
- example.com
- www.example.com
# 密钥算法(整段省略时按 ec-256)
csr:
key_type: ecdsa # rsa / ecdsa;命令行入口为 -k/--keylength(ec-256 / ec-384 / rsa-2048 / rsa-3072 / rsa-4096)
key_size: 256 # ecdsa: 256 / 384;rsa: 2048 / 3072 / 4096
# ACME 账户与质询
acme:
account: acme-1 # accounts/ 下的账户目录名;也可通过 directory_url / email / eab_* 声明账户身份
directory_url: "https://acme.example.com/acme/v2/directory" # 完整 CA Directory URL
email: "mail@example.com" # 账户联系邮箱
eab_kid: "eab-9f3k2d" # EAB 密钥 ID(CA 要求 EAB 时)
eab_hmac_key: "" # EAB HMAC 密钥;敏感字段,见下方权限说明
challenge: dns-01 # dns-01(默认)/ http-01;通配符域名仅支持 dns-01
http: # 仅 challenge: http-01 时使用
mode: webroot # webroot(默认)/ standalone
webroot_path: /var/www/html # webroot 模式的站点根目录(必填)
port: 80 # standalone 模式的监听端口;0 按 80
# DCV 验证 hook(与 CertCloud 模式同一契约)
dcv:
present: ./dns-present.sh # 布置验证记录,每域名一次;dns-01 必须配置
cleanup: ./dns-cleanup.sh # 清理验证记录,每域名一次
# 部署
deploy: "systemctl reload nginx" # 部署 hook(每证书一次)
# 输出
output:
formats: [pem, pfx] # 额外输出格式:der / pfx / jks
# 下面四项是【额外安装位置】(不是重命名标准文件)——见下方"额外安装位置"小节
cert_file: /etc/nginx/ssl/example.pem # 相对路径以证书目录为基准
key_file: /etc/nginx/ssl/example.key # 私钥恒 0600
ca_file: /etc/nginx/ssl/example-chain.pem
fullchain_file: /etc/nginx/ssl/example-fullchain.pem
pfx_file: example.com.pfx
pfx_encoding: modern # modern(默认)/ legacy
jks_file: example.com.jks
jks_alias: server
password: "" # PFX/JKS 口令;与 password_file 互斥
password_file: ./pfx.pass
# 续期
renew:
auto_cert: true # 纳入自动续期,由定时任务统一扫描
days_before: 0 # 提前续期天数;非 0 完全按此判定(不再请求 ARI),0 才走 ARI 动态窗口字段与 acme issue 命令的 flag 对应,命令行 flag 会覆盖配置文件的值。
EAB HMAC 的文件权限
acme.eab_hmac_key 为敏感字段。配置文件包含该字段时,Linux / macOS 要求文件权限为 0600,Windows 要求 DACL 仅当前用户、SYSTEM 与管理员可访问;权限不符合要求时命令拒绝执行。
参数复用机制
首次运行 acme issue 时使用的参数会固化到 cert.yaml;后续 acme renew / acme convert / acme deploy 直接读取该文件,无需重复指定这些 flag。
关键规则:
- 账户:
acme.account记录账户目录名;需要更换账户时,运行acme issue -d <主域名> --account <新账户> -f显式应用变更 - 密钥算法:
csr在首次申请时确定;续期沿用相同算法,但每次续期生成新私钥,新证书下载完成后才替换privkey.pem - 域名与密钥变更:
domains或密钥算法与现有证书不一致时,acme renew拒绝直接续期,需运行acme issue申请替代证书 - 单次覆盖:命令行 flag 仅对本次运行生效,不会写回
cert.yaml(例如certiman acme deploy -d example.com --deploy-hook "systemctl reload nginx"仅在本次运行时执行该部署命令,不修改配置)
额外安装位置
output.cert_file / key_file / ca_file / fullchain_file(或对应 flag --cert-file / --key-file / --ca-file / --fullchain-file)是额外安装位置:证书目录 ~/.certiman/acme/certs/<CN>/ 里的标准文件不受影响,CLI 会将内容另外复制一份到指定路径。
规则:
- 相对路径以证书目录
~/.certiman/acme/certs/<CN>/为基准;绝对路径直接使用 - 私钥(
key_file)无论目标目录权限如何,均以0600权限写入 - 目标目录必须存在且当前用户可写;不满足时报错,且不执行 deploy hook
- 配置
fullchain_file/key_file后,deploy hook 收到的CERTIMAN_CERT_PATH/CERTIMAN_KEY_PATH环境变量指向安装位置,而非证书目录中的副本;脚本中引用的文件路径需相应调整
典型用法:Nginx / Apache 通常使用固定的证书路径,可通过 output.*_file 直接复制证书,deploy hook 中只需执行 reload,无需手动 cp。
yaml
output:
formats: [pem]
fullchain_file: /etc/nginx/ssl/example-fullchain.pem
key_file: /etc/nginx/ssl/example.key
deploy: systemctl reload nginx相关文档
- ACME 命令 · issue —— 首次生成
cert.yaml - ACME 命令 · renew —— 续期判定与私钥策略
- Hook 环境变量 —— deploy hook 收到的实际路径
- 配置 —— 数据目录与全局配置
