SSL 证书
自动申请并续期证书,供 Web 服务 使用,也可以导出给其他软件。
能力
- ACME DNS-01 自动签发与续期,复用 动态域名 中的 DNS 服务商,无需开放 80 / 443 端口;
- ACME HTTP-01:不需要 DNS 服务商,要求公网能访问各域名的 80 端口,不支持通配符;
- 通配符证书与 EAB(如 ZeroSSL);
- 上传已有证书,或从文件读取;
- 映射到目录:证书变化后写入指定目录并执行脚本,方便其他服务重载;
- 自动部署:证书变化后复制到多个本机目录、经 SSH 推送到其他主机并执行命令,或重启使用该证书的 Docker 容器。
HTTP-01 验证
在证书的「验证方式」中选择 HTTP-01。签发时 CA 会访问 http://<域名>/.well-known/acme-challenge/<token>:
- Web 服务 已在 80 端口监听时,由它直接应答,不影响现有站点;
- 80 端口空闲时,Gately 会在签发期间临时监听该端口,完成后立即关闭;
- 路由器把公网 80 端口转发到本机其他端口时,在「临时监听端口」中填写该端口。
国内家庭宽带通常封锁入站 80 端口,此时请使用 DNS-01。
证书映射
启用证书后,Gately 会把 .crt、.key、.pem 与 _issuerCertificate.crt 写入映射目录,并执行变化脚本。
自动部署
在证书的「自动部署」中可以添加多个部署目标,证书签发、续期或更新后自动执行:
- 复制到本机目录:把证书写入本机的目录,再在本机执行「复制后执行」的命令,可以添加多个目录、每个目录使用不同的命令。目录中的证书文件被删除或改动后,下一次检查会重新复制。Gately 运行在 Docker 中时,目录与命令都在容器内;
- 上传到 SSH 主机:选择 Web 终端 中已有的 SSH 连接,复用它的地址、认证方式与代理。证书文件(
<备注>.crt、.key、.pem、_issuerCertificate.crt,与证书映射相同,因此备注不能为空)写入远程目录后,在远程主机执行「上传后执行」的命令,例如systemctl reload nginx,命令中可用$certName、$certDir、$certFile、$keyFile。文件先写临时文件并设好权限再改名替换,私钥权限为 0600; - 重启本机容器:证书变化后依次重启所选的 Docker 容器,适合容器挂载了映射目录、需要重启才能加载新证书的服务。
「复制到本机目录」与「上传到 SSH 主机」可以填写证书(完整链)与私钥的文件名,例如 fullchain.pem 与 privkey.pem,两个都填写后只写入这两个文件,此时备注可以为空;留空时使用与证书映射相同的文件名。命令中的 $certFile、$keyFile 指向实际写入的文件。
自动部署不会信任未知主机:所选 SSH 连接需要先在 Web 终端中连接一次,记录主机密钥后才会推送。部署失败时每小时重试一次,并发出「证书:部署失败」事件,可在通知中心订阅。证书卡片上的「立即部署」会忽略重试间隔,马上部署到所有启用的目标并显示每个目标的结果。
编辑证书时,目标设置没有变化的部署不会重复执行;修改远程目录、命令或容器后会重新部署一次。
安全提示
私钥保存在配置目录的 ssl.json 中,请妥善保管该文件,纳入版本库时确认仓库为私有。
从 Lucky 迁移
已签发的证书可原样导入,未到期前不会重新申请。ZeroSSL 沿用 Lucky 中的 EAB 凭据注册新的 ACME 账户。详见 迁移指南。