Appearance
快速上手
本页演示从下单到自动化部署的完整流程:登录 → 申请证书 → 部署到服务器 → 开启自动续期。完成后,证书到期前的续期、下载、安装与服务重载均自动完成,无需人工操作。
前置准备
在开始之前,请确认:
- 已按 安装 certiman 完成安装,运行
certiman version可输出版本号 - 拥有一个 CertCloud 账号
- 拥有本次示例中所用域名的 DNS 管理权限(用于 DCV 域名验证)
示例域名
本页所有示例统一使用 example.com 与 www.example.com。这两个域名为 IANA 保留域名,不指向任何真实站点。实际操作时请替换为自有域名。
登录
CertiMan CLI 通过 OAuth 2.0 设备授权流(RFC 8628)完成登录,无需在命令行输入任何长期密钥。
bash
certiman login运行后,命令行输出验证地址与用户码;有图形环境时同时自动打开浏览器。在浏览器中确认授权后,CLI 自动完成登录。
授权确认
在无图形环境(例如 SSH 会话)中,将命令输出的验证地址复制到任意可访问互联网的设备上打开。浏览器将显示 CertCloud 授权确认页:

核对页面信息(当前账号、应用名 CertiMan、授权范围、失效时间)无误后,点击【同意授权】;若当前账号不是本次要授权的账号,先点击【切换账号】。授权完成后,命令行输出 ✔ 已登录。
只在主动发起登录时确认
如果未主动运行 certiman login 却看到该授权确认页,可能有他人正在使用该用户码尝试登录当前账号。请点击【拒绝】,不要点击【同意授权】。
示例输出
验证登录状态
运行以下命令查看当前登录状态:
bash
certiman login status申请证书
复用平台已有订单
已在 CertCloud 控制台创建订单时,可直接复用该订单申请证书:
在 CertCloud 控制台下单时,交付方式选择「自动交付」。

订单提交后,在「选择接入方式」中选择「命令行工具 CLI」,按服务器的操作系统切换标签,复制页面给出的命令。其中最后一条为复用该订单申请证书的命令。

复用订单的命令格式如下:
bash
certiman issue --reuse-order Kp7XvQ2m域名、产品、年限、验证方式与密钥算法全部取自该订单,证书目录名由订单的主域名派生。若同时给出 -d,其取值必须是订单域名的子集,不一致时直接拒绝。
交互向导
尚未创建订单时,不带参数运行 certiman issue,按 域名 → 订单 → 产品 → 年限 → 验证方式 的顺序逐步选择:
bash
certiman issue命令模式
适用于脚本与 CI 场景。需一次提供全部必需参数,缺少参数时直接报错:
bash
certiman issue \
-d example.com -d www.example.com \
--product-id trustasia_ssl_dv_v2 \
--validity-months 12 \
--dcv.method dns-d 可重复传入,首个域名为主域名(CN 与证书目录名)。完整参数见 证书命令 · issue。
完成域名验证
issue 提交订单后输出需要添加的 DNS 验证记录,请在 DNS 服务商处添加。验证通过后,CLI 自动下载证书并保存到 ~/.certiman/cc/certs/example.com/。
以阿里云 DNS 为例,按终端输出的主机记录与记录值添加一条 TXT 记录(图中为 dns-persist 验证方式的记录):

等待验证期间,可在浏览器中打开终端输出的办理进度链接,无需登录即可查看提交订单、域名验证、CAA 记录检测与证书签发等各环节的状态:

中途退出不影响进度:运行同一条命令即可继续申请,不会重复下单。随时可运行 certiman status -d example.com 查看当前状态。
域名验证自动化
选择 dns-persist 验证方式时,DNS 验证记录添加一次即长期有效,后续续期无需修改 DNS。如需完全自动化,可配置 dcv.present / dcv.cleanup hook 调用 DNS 服务商 API,见 DNS 验证示例。
证书文件
签发完成后,证书目录 ~/.certiman/cc/certs/example.com/ 中的文件如下:
| 文件 | 用途 |
|---|---|
fullchain.pem | 服务器证书 + 中间证书链,Nginx、Apache 等应指向此文件 |
privkey.pem | 私钥,权限 0600 |
cert.pem | 仅服务器证书,不含链;单独使用会导致部分客户端握手失败 |
chain.pem | 仅中间证书链 |
部署到服务器
以 Nginx 为例,完成以下四个步骤后,每次续期都会自动安装证书并重载服务。
1. 声明安装位置
服务进程通常从其配置目录读取证书。在 cert.yaml 的 output 中声明安装位置后,CertiMan 在每次签发与续期后自动将证书文件复制到该位置:
yaml
output:
fullchain_file: /etc/nginx/ssl/example-fullchain.pem
key_file: /etc/nginx/ssl/example.keyNginx 配置指向同一组路径:
nginx
ssl_certificate /etc/nginx/ssl/example-fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/example.key;目标目录不可写时 deploy 直接报错且不执行 hook,因此需确保运行 certiman 的用户对该目录具有写权限。
2. 编写 deploy hook
将脚本放在数据目录下的 ~/.certiman/hooks/(目录权限 0700),便于与证书一同备份和迁移:
bash
mkdir -p ~/.certiman/hooks && chmod 700 ~/.certiman/hooks无需从零编写脚本:部署示例 提供 Nginx、Apache、systemd 通用与 Windows IIS 四份可直接使用的脚本(含备份与失败回滚),复制后按脚本顶部 ── 改这里 ── 段调整路径;DNS 验证示例 提供腾讯云 DNSPod、Cloudflare、阿里云 DNS 的 present/cleanup 脚本。也可以运行 certiman hook init deploy --out ~/.certiman/hooks/nginx.sh 生成带完整环境变量注释的脚本骨架。
若只需重新加载 Nginx,可使用以下 ~/.certiman/hooks/nginx.sh:
sh
#!/bin/sh
# 证书更新后重新加载 nginx
set -eu
nginx -t # 配置校验不通过即中止,避免重载后服务不可用
systemctl reload nginxbash
chmod 700 ~/.certiman/hooks/nginx.sh在 cert.yaml 中以绝对路径引用该脚本(hook 的工作目录为证书目录,相对路径将按证书目录解析):
yaml
deploy: /home/<用户名>/.certiman/hooks/nginx.sh脚本可读取 CERTIMAN_RENEWED 区分触发来源:true 为续期或重新颁发,false 为首次签发与手动执行 deploy。完整变量清单见 Hook 环境变量。
3. 验证 hook
使用模拟数据在本机试运行脚本,确认路径、权限与命令均正确;退出码非 0 表示失败:
bash
certiman hook test -d example.com --step deploy4. 执行一次部署
bash
certiman deploy -d example.com该命令按 output 将证书文件复制到安装位置,随后执行 deploy hook。对已部署成功的证书再次运行时,提示上次部署已成功并以退出码 2 结束;如需重新部署,运行 certiman deploy -d example.com -f。
部署完成后,可使用 MySSL 等第三方工具检测证书部署结果,核对颁发者、有效期与备用名称是否符合预期:

开启自动续期
1. 打开续期开关
在 cert.yaml 中开启,或在申请时指定 --renew.auto-cert:
yaml
renew:
auto_cert: true # 订单服务期内自动续期,不额外计费
auto_order: false # 服务期结束后是否自动续费下新订单(会产生费用)2. 注册定时任务
bash
certiman cron installmacOS 与 Linux 注册用户级 crontab,Windows 注册计划任务,默认每 12 小时执行一轮扫描。
Windows 需以管理员身份运行
cron install 通过 schtasks 注册系统级任务,必须在以管理员身份运行的 PowerShell 或 CMD 中执行,普通权限终端将被系统拒绝。
3. 确认已生效
bash
certiman cron status完整输出在上述信息之前还会列出本机所有证书及其剩余天数,示例见 cron status。
完成后的 cert.yaml
完成以上步骤后,该证书的 cert.yaml 如下,续期、下载、安装与服务重载均由 CertiMan 自动完成:
yaml
version: 2
domains:
- example.com
- www.example.com
product_id: trustasia_ssl_dv_v2
validity_months: 12
dcv:
method: dns-persist
deploy: /home/<用户名>/.certiman/hooks/nginx.sh
output:
fullchain_file: /etc/nginx/ssl/example-fullchain.pem
key_file: /etc/nginx/ssl/example.key
renew:
auto_cert: true每轮扫描检查该证书是否进入续期窗口。进入续期窗口后,CertiMan 自动续期、下载证书、按 output 安装证书,并执行 deploy hook 重载服务,无需人工操作。
下一步
- 多张证书共用一套脚本:将域名验证脚本与部署脚本集中存放在
~/.certiman/hooks/下,各证书以绝对路径引用同一份脚本,见 Hook 命令 · 推荐目录规划 - 固化申请参数:使用 账号命令 · profile 将产品、组织、验证方式与部署 hook 保存为模板,申请时通过
issue --profile <name>复用 - 排查自动续期:运行
certiman doctor检查运行环境,运行certiman cron status查看下次触发时间与待人工处理项;日志位于~/.certiman/logs/
相关文档
- 概述 —— CertiMan CLI 的功能范围与支持平台
- 安装 certiman —— 一键脚本安装
- 配置 —— 配置文件、全局 flag、环境变量、退出码
