Skip to content

快速上手 ​

本页演示从下单到自动化部署的完整流程:登录 → 申请证书 → 部署到服务器 → 开启自动续期。完成后,证书到期前的续期、下载、安装与服务重载均自动完成,无需人工操作。

前置准备 ​

在开始之前,请确认:

  • 已按 安装 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 授权确认页:

CertCloud 授权确认页

核对页面信息(当前账号、应用名 CertiMan、授权范围、失效时间)无误后,点击【同意授权】;若当前账号不是本次要授权的账号,先点击【切换账号】。授权完成后,命令行输出 ✔ 已登录。

只在主动发起登录时确认

如果未主动运行 certiman login 却看到该授权确认页,可能有他人正在使用该用户码尝试登录当前账号。请点击【拒绝】,不要点击【同意授权】。

示例输出 ​

0成功
text
» 请在浏览器打开以下地址完成授权(已尝试自动打开):
  https://certcloud.cn/oauth/device?user_code=5G52-JS1S
  (或访问 https://certcloud.cn/oauth/device 手动输入用户码: 5G52-JS1S,10 分钟内有效)
i 批准前请核对页面显示的应用名称,谨防钓鱼
等待授权…
✔ 已登录(当前用户: user)
✔ 凭证已写入 ~/.certiman/cc/credentials(权限 0600;令牌自动滚动刷新,无需重复登录)

验证登录状态 ​

运行以下命令查看当前登录状态:

bash
certiman login status
0成功
text
项                值
当前用户          user
所属账号          Jfe6Tl3C
发布通道          release
OpenAPI 端点      https://api.certcloud.cn
认证服务端点      https://certcloud.cn
访问令牌有效期至  2026-08-07T11:41:31Z
刷新令牌有效期至  2026-09-06T10:41:31Z

申请证书 ​

复用平台已有订单 ​

已在 CertCloud 控制台创建订单时,可直接复用该订单申请证书:

  1. 在 CertCloud 控制台下单时,交付方式选择「自动交付」。

    CertCloud 控制台选择自动交付

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

    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/。

0成功
text
✔ 配置已保存到 ~/.certiman/cc/certs/example.com/cert.yaml(目录名由主域名派生)
✔ 订单已创建: dR8kM2xQ

» 域名验证 · dns · 还有 2 个待验证

  域名         example.com
  主机记录     _dnsauth.example
  完整记录名   _dnsauth.example.com
  记录类型     TXT
  记录值       20260807094634ph63evbme7ky3qrm6xg8xpj8xawj4xo

  域名         www.example.com
  主机记录     _dnsauth.www.example
  完整记录名   _dnsauth.www.example.com
  记录类型     TXT
  记录值       20260807094634mw7xk2q9vdn4tj8rpb6yh3cg5fs1el0z

→ 请在 DNS 服务商控制台添加上述记录(阿里云 / 腾讯云 / Cloudflare 等)

» 办理进度链接 · 免登录 · 可转发给 DNS 管理员或审核对接人:
  https://certcloud.cn/ssl-order-audit-link?token=<实时生成,24 小时有效>
» DNS 记录传播需要时间,正在等待并重试检测…
✔ 域名验证已全部通过
✔ 证书已保存到 ~/.certiman/cc/certs/example.com
-----BEGIN CERTIFICATE-----
MIIFxTCCBK2gAwIBAgIQ...(叶子证书,此处省略)
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIEsTCCA5mgAwIBAgIQ...(中间证书,此处省略)
-----END CERTIFICATE-----
项目        内容
证书        example.com
域名        example.com, www.example.com
状态        已签发
订单        dR8kM2xQ
证书 ID     gF8KdBlw
证书到期    2027-02-22
剩余        199 天
已下载      2026-08-07
部署        —
自动续期    —
数据时间    2026-08-07T09:47:12Z(本地快照)
证书目录    ~/.certiman/cc/certs/example.com
i 未配置部署 hook;如需自动部署,可在 cert.yaml 中配置 `deploy`,或运行 `certiman deploy -d example.com`
✔ 本轮已完成,当前无需处理

以阿里云 DNS 为例,按终端输出的主机记录与记录值添加一条 TXT 记录(图中为 dns-persist 验证方式的记录):

在阿里云 DNS 添加 TXT 验证记录

等待验证期间,可在浏览器中打开终端输出的办理进度链接,无需登录即可查看提交订单、域名验证、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.key

Nginx 配置指向同一组路径:

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 nginx
bash
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 deploy

4. 执行一次部署 ​

bash
certiman deploy -d example.com

该命令按 output 将证书文件复制到安装位置,随后执行 deploy hook。对已部署成功的证书再次运行时,提示上次部署已成功并以退出码 2 结束;如需重新部署,运行 certiman deploy -d example.com -f。

部署完成后,可使用 MySSL 等第三方工具检测证书部署结果,核对颁发者、有效期与备用名称是否符合预期:

MySSL 检测证书部署结果

开启自动续期 ​

1. 打开续期开关 ​

在 cert.yaml 中开启,或在申请时指定 --renew.auto-cert:

yaml
renew:
  auto_cert: true                   # 订单服务期内自动续期,不额外计费
  auto_order: false                 # 服务期结束后是否自动续费下新订单(会产生费用)

2. 注册定时任务 ​

bash
certiman cron install

macOS 与 Linux 注册用户级 crontab,Windows 注册计划任务,默认每 12 小时执行一轮扫描。

Windows 需以管理员身份运行

cron install 通过 schtasks 注册系统级任务,必须在以管理员身份运行的 PowerShell 或 CMD 中执行,普通权限终端将被系统拒绝。

3. 确认已生效 ​

bash
certiman cron status
0已注册(示例)
text
» 定时任务已注册(crontab)
  调度表达式(crontab):  43 3,15 * * *
  下次触发:      2026-08-09 03:43:00
  上次完成:      本机尚未完成任何一轮扫描

完整输出在上述信息之前还会列出本机所有证书及其剩余天数,示例见 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、环境变量、退出码