首页 > 开源 > SSL免费申请,自动部署

SSL免费申请,自动部署

OSChina项目 2026-10-16 13:42 6 阅读 查看原文

证枢是一套证书控制台:向 ACME 证书机构申请免费证书,按域名替换 Nginx 证书目录里的旧文件,然后重启或重载 Nginx。Vue 3 管理台和 Go 服务打在同一个可执行文件里,浏览器打开即可使用。

它解决的是日常运维里反复出现的几件事:证书快到期没人看、申请和部署拆在不同工具里、通配符证书要手工改 DNS、私钥散落在多台机器上。

 

 

 

 

 

 

 

 

能力一览

能力 做什么
证书申请 向 Let's Encrypt 等 ACME 机构申请单域名、多域名或通配符证书
自动部署 只覆盖证书目录中的 域名.pem 与 域名.key,检测通过后再重启或重载 Nginx
单独领取 先拿到证书材料,下载后自行安装到 Nginx、httpd 或 IIS
到期总览 看证书数量、已部署数量、30 天内到期和失败任务
定时续期 用 Cron 在到期窗口内重新申请,已绑定 Nginx 的证书同时部署
任务追踪 每次执行记录触发来源、阶段和错误
权限控制 租户隔离,管理员、运维、只读三种内置角色,也可自定义授权

控制台

登录后左侧菜单按当前账号的权限显示。租户由账号归属决定,登录时不用填写租户编号。

页面 用途
总览 证书总数、已部署、30 天内到期(含已过期)、失败与执行中任务,以及即将到期的证书列表
证书 新建、按名称或域名搜索、按状态筛选,并执行申请、签发并部署、部署、下载、删除
数据源 登记 ACME 账户和 Nginx 部署目标,可测试连通性、注册账户
流水线 查看绑定到证书的签发流水线,选择「只申请」或「申请并部署」
任务 查看每次执行的编号、来源、状态、阶段、时间和错误
调度 为流水线设置 Cron,启用或停用
用户 新建用户、分配角色
角色 查看内置角色,并为非管理员角色勾选权限

右上角可以修改密码。首次使用默认管理员时,系统会提示先改掉初始密码。

一次签发怎么走

创建证书时指定名称、域名、验证方式、ACME 账户、密钥类型,以及到期前多少天可以续期(1 到 60 天,默认 30 天)。勾选「允许调度自动续期」后,定时任务才会在窗口内重新申请。创建前需要同意 ACME 服务条款。

密钥可选 EC P-256 或 RSA 2048。

证书状态:

状态 含义
草稿 已创建,尚未成功签发
签发中 正在向证书机构申请
已签发 证书材料已保存,尚未部署到 Nginx
已部署 证书文件已写入目录,并完成重启或重载
失败 本次申请或部署没有成功,可在任务里查看原因

一次执行分成三段:

  1. 提取:按当前登录租户读取证书、ACME 账户和 Nginx 目标。还没进入续期窗口时停止,避免无意义地重复申请。
  2. 申请:按所选验证方式向证书机构申请。
  3. 部署:仅在需要部署时执行。按主域名覆盖证书目录里的 域名.pem 和 域名.key。例如 *.nbsaas.com 写成 nbsaas.com.pem 与 nbsaas.com.key。接着执行 nginx -t,通过后再重启或重载。检测失败会恢复旧文件。平台不修改 Nginx 配置文件,配置里需要事先写好这两个文件的路径。

可以只申请、不部署。DNS-01 创建证书时不选 Nginx 即可。HTTP-01 仍要借用 Nginx 的网站根目录完成验证,但可以只申请、不立刻重启。库里还没有证书材料时,「部署」会沿用磁盘上已有的证书文件,只做重启。

域名验证

HTTP-01 把挑战文件写到 Nginx 的网站根目录,例如 /var/www/acme/.well-known/acme-challenge/。签发前,域名必须能通过 80 端口访问到这个目录。适合已经解析到本机、且可以开放 80 端口的站点。

DNS-01 调用 ACME 账户绑定的云厂商 DNS,写入 _acme-challenge TXT 记录,等待解析生效后再完成验证。通配符证书只能走这条路径。耗时通常长于 HTTP-01。

证书机构与 DNS

创建 ACME 数据源时填写联系邮箱,并选择证书机构。平台会生成账户私钥。可以创建后立即注册,也可以稍后在列表里点「注册」。密钥不会出现在接口响应里;更新时把密钥留空,表示保留原值。

内置机构:

机构 说明
Let's Encrypt 生产环境 浏览器信任,用于正式域名
Let's Encrypt 测试环境 不消耗生产额度,证书不受浏览器信任。默认目录是测试环境
ZeroSSL 需要在 ZeroSSL 控制台创建外部账号绑定(EAB)
Google Trust Services 需要 Google Public CA 的 EAB 密钥
Buypass / Buypass 测试环境 测试环境证书不受浏览器信任
SSL.com 需要 SSL.com 提供的 EAB 密钥
自定义目录 填写任意兼容 RFC 8555 的 ACME 目录地址

生产环境目录是 https://acme-v02.api.letsencrypt.org/directory。

DNS-01 可绑定的云厂商:

  • 阿里云 DNS
  • 腾讯云 DNS、DNSPod Token
  • 华为云 DNS
  • 百度智能云 DNS
  • 火山引擎 DNS
  • Amazon Route 53
  • Azure DNS(公共云、中国区、美国政府云)
  • Google Cloud DNS
  • Cloudflare
  • DigitalOcean

不绑定云厂商时,该账户只能做 HTTP-01。

下载证书

已签发的证书可以下载三种压缩包,尚未签发时不能下载。列表里能看到到期时间和剩余天数。私钥不会出现在列表和详情里,只能通过下载取出。

格式 压缩包内容
Nginx 域名.pem、域名.key,以及一份仅供对照的 nginx.conf。自动部署不会把这份配置写到服务器上
httpd server.crt、server.key、chain.crt、httpd.conf。没有中间证书时省略证书链。apache 与此相同
IIS certificate.pfx 和 iis.txt。下载时填写 8 到 64 位密码,PFX 使用 IIS 可导入的传统 PKCS#12

部署到 Nginx

Nginx 数据源记录这些信息:

  • nginx 程序路径,例如 /usr/sbin/nginx
  • 服务管理方式:向进程发信号,或通过 systemd
  • 动作:重启或重载。默认是重启
  • systemd 服务名
  • HTTP-01 网站根目录
  • 证书目录,例如 /usr/local/nginx/conf/certs
  • 是否在重启前执行 nginx -t
  • 是否演练:只写文件,不重启

信号模式执行 nginx -s quit 后再启动;systemd 模式执行 systemctl restart nginx。可执行程序只允许 nginx、systemctl、service,参数按数组传递,不经过 shell。

自动续期

调度绑定一条签发流水线,使用五段 Cron,例如每天凌晨 3 点 15 分:15 3 * * *。可以随时启用或停用,页面上能看到下次执行时间和上次结果。

续期时,没有绑定 Nginx 的证书只会重新申请。已绑定 Nginx 的证书在窗口内会申请并部署。证书上的「允许调度自动续期」关闭后,定时任务不会改这张证书。

权限与租户

数据按租户隔离。请求里不能自行指定租户,租户只从登录令牌解析。

首次启动会创建默认租户和三个内置角色:

角色 能做的事
管理员 当前租户的全部权限,含用户、角色和授权
运维 申请、部署证书,管理数据源、流水线和调度
只读 查看证书、任务、流水线、数据源、用户和角色

管理员角色的权限固定为全部,不能在页面上裁剪。其他角色可以按资源动作勾选,例如「单独申请证书」「下载证书」「部署证书并重启 Nginx」。

默认管理员用户名是 admin。密码来自环境变量 SSL_ADMIN_PASSWORD,未设置时是 Admin@123456。这个账号只在空库时创建,登录后应立即修改密码。

怎么运行

三种常见方式,控制台默认都在 http://127.0.0.1:8080。

单个程序。 前端构建后打进二进制。启动后由程序自己托管页面,浏览器直接访问,不需要单独的前端服务。

Docker Compose。 同一容器里运行 Nginx 和控制台。80 端口提供 HTTP-01 目录,8080 是控制台。初始化后会写入容器内的 ACME 账户和 Nginx 数据源,证书目录是 /usr/local/nginx/conf/certs。

Linux systemd。 用安装脚本注册服务,程序放在 /usr/local/bin/sslplatform,配置在 /etc/sslplatform,数据在 /var/lib/sslplatform。首次安装会生成管理员密码并写到 /etc/sslplatform/initial-admin.txt。服务以 root 运行,以便写入 Nginx 证书目录并执行重启。再次安装只替换程序,已有配置、密钥和管理员密码保持不变。卸载默认保留配置和数据库。

也可以在 Windows 上一次打出 Linux、Windows、macOS 的可执行文件和压缩包,覆盖 amd64、arm64 以及 32 位 ARM。压缩包里带配置和启动脚本。

使用时要注意

  • 默认 ACME 目录是 Let's Encrypt 测试环境,证书不受浏览器信任。正式站点要改成生产目录。
  • Nginx 配置需要事先指向证书目录里的 域名.pem 和 域名.key。平台只替换这两个文件。
  • HTTP-01 依赖 80 端口和网站根目录;通配符必须使用已绑定云厂商 DNS 的账户。
  • 私钥保存在本机 SQLite 中,数据库文件权限为 0600。下载和部署是取出私钥的途径,列表和详情不会返回私钥。
  • 云厂商密钥建议使用最小权限,例如只授予对应 DNS 产品的管理权限。