该项目主要是为了解决大家在使用自动化证书申请平台,如 Certd 🚀 时,证书部署服务器密钥填写在平台中可能出现的安全问题,同时又有多个站点需要部署证书的场景,SSL Assistant 可以有效的帮助大家解决这个问题。
SSL Assistant 是一个基于 Go 语言开发的跨平台证书部署管理助手 🤖,用于SSL远程证书拉取,并自动完成SSL证书更新及生效流程。该工具支持 Windows 和 Linux 平台 🖥️,可以自动寻找 Nginx 服务对应站点的配置文件,获取域名和证书信息,并将证书信息保存到数据库中。 可通过计划任务定期更新证书,实现 SSL 证书的自动更新和部署 ⏰。
- 跨平台支持:同时支持 Windows 和 Linux 系统 🖼️
- 自动化管理:自动寻找 Nginx 配置文件(已兼容宝塔面板、1Panel),获取域名和证书信息 🧐
- 证书更新:主动拉取远程证书信息,以证书文件实际过期时间判断是否需要更新,自动部署并重载生效 🔄
- 多渠道证书:支持多种证书申请管理工具,如 Certd、西部数码等 📡
- 自动申请:证书不存在时可触发 Certd 自动创建流水线申请新证书(需在初始化时开启)🚀
- 自动匹配路径:添加证书时自动从 Nginx/宝塔配置匹配证书存放路径,无需手动输入 📂
- 命令行操作:提供简单易用的命令行界面 💻
- 本地存储:使用 SQLite / BadgerDB 数据库存储证书信息 🗄️
- 计划任务:支持定期更新证书,实现 SSL 证书的自动更新和部署 ⏰
- 自动测试:内置单元测试与 GitHub Actions CI,保障代码质量 ✅
- 支持 Windows 和 Linux 平台 🎉
- 手动指定 Nginx 配置目录 ✅
- 初始化自动检索 Nginx 配置,无需手动输入路径 ✅
- 支持自动寻找 Nginx 配置文件
- 原生Nginx环境 🐱🏍
- 宝塔面板 🏰
- 1Panel 📦
- 小皮面板Windows 🐘
- 小皮面板 🐘
- 支持自动获取证书信息 🔍
- 添加证书自动匹配 Nginx/宝塔配置中的证书路径 📂
- Certd 证书不存在时自动申请(autoApply)🚀
- 证书ID(certId)持久化,更新时优先按证书ID拉取 🔢
- 支持更多证书申请管理工具
- 本地证书与云端证书一致性校验,一致的话则不更新证书,减少重载次数 🔗
- 以证书文件实际过期时间判断是否更新,避免漏更新过期证书 ⏲️
- 内部配置定时更新任务,支持每天或每周定期检查并更新证书 ⏲️
- 增加通信能力,支持三方证书平台主动投送证书信息,并自动更新证书 📡
- 下载对应平台的运行文件 Releases 下载页面 ⬇️
- 初始化程序:
SSL-Assistant init根据提示完成初始化配置,填写API地址、API密钥、重载命令等信息。初始化时会自动检索宝塔/1Panel/原生 Nginx 的配置文件并导入证书,无需手动输入路径 ⚙️ - 添加证书:
SSL-Assistant add输入域名,程序会自动根据域名获取证书信息,并自动匹配 Nginx/宝塔配置中的证书路径,保存到数据库,以便后面的更新操作 ➕ - 定期更新:可使用Crontab设置定时任务定期执行
SSL-Assistant update,自动更新部署证书 🔁
SSL-Assistant init初始化程序,设置证书信息获取的凭证和证书更新后需要执行的命令。初始化完成后,程序会自动寻找宝塔/1Panel/原生 Nginx 的配置文件,获取域名和证书信息。
自动检索到证书配置后不会再询问自定义路径;仅当默认路径(宝塔
/www/server/panel/vhost/nginx/*.conf、1Panel/opt/1panel/www/conf.d/*.conf、/etc/nginx等)未找到证书时,才提示可手动补充(直接回车跳过)。
SSL-Assistant add手动添加证书信息,程序会自动根据域名获取证书信息。若该域名在 Nginx/宝塔配置中存在,会自动匹配证书与私钥路径(可确认使用);未匹配到才需要手动输入路径。
SSL-Assistant update更新证书,程序会以证书文件的实际过期时间判断是否需要更新(提前 N 天,默认 10 天),过期或临近过期时自动拉取最新证书,更新证书文件并重载生效。
即使数据库记录显示证书有效,只要站点上的证书文件已过期/临近过期,也会触发更新,避免漏更新。
SSL-Assistant show查看证书,显示证书信息的表格,包括 ID、域名、状态、创建时间、过期时间、证书路径、私钥路径等信息。
SSL-Assistant del删除指定域名的证书信息,包括证书文件、证书配置等。
SSL-Assistant find快速添加域名,程序会自动寻找 Nginx 配置文件,获取域名和证书信息,并将证书信息保存到数据库中,以便后面的更新操作。
SSL-Assistant cron &crontab 二选一即可
证书更新自动化任务,每日凌晨4点自动检测证书更新,并执行证书更新操作。
运行此命令后,无需再次执行 SSL-Assistant update 命令,程序会自动检测证书更新并执行证书更新操作。
任务运行期间,程序会记录运行日志,日志文件位于程序运行目录下的
cron.log文件中
SSL-Assistant -h查看帮助文档,了解所有可用命令及其用法。
- 打开任务计划程序
- 创建基本任务
- 设置触发器为每天或每周
- 设置操作为启动程序,程序为 SSL-Assistant,参数为 update
使用 crontab 设置定时任务:
crontab -e添加以下内容:
30 1 * * * /usr/local/bin/SSL-Assistant update
证书数据库文件存储在用户主目录的 .ssl_assistant 文件夹中:
Windows: C:\Users\<username>\.ssl_assistant
Linux: /home/<username>/.ssl_assistant
配置文件放在程序运行目录下config/conf.ini
可手动修改或使用命令SSL-Assistant show或SSL-Assistant init修改相关配置
常用配置项:
| 配置键 | 说明 |
|---|---|
restart_cmd |
证书更新后执行的重载命令,支持引号/管道等 Shell 语法(如 docker restart $(docker ps -aqf "name=openresty")) |
before_expiration_day |
证书过期前多少天触发更新(默认 10) |
third.certd.api_url / key_id / key_secret |
Certd 开放接口地址与凭证 |
third.certd.auto_apply |
证书不存在时是否触发 Certd 自动申请(1 开启) |
third.certd.auto_apply_template_id |
自动申请使用的证书参数模版 ID(可选) |
third.certd.auto_apply_renew_days |
自动申请时到期前多少天更新(默认 10) |
third.west.username / api_key |
西部数码平台用户名与 API 密钥 |
重载命令用于SSL证书内容更新后更新服务,命令通过系统 Shell 执行(Linux sh -c / Windows cmd /C),支持引号、管道、$(...) 等语法,并有 60 秒超时保护
- Nginx:
nginx -s reload - 1Panel:
docker restart $(docker ps -aqf "name=openresty")1Panel因为采用了Docker容器化部署,所以需要重启容器才能生效,可能会出现服务中断问题
- 确保程序有足够的权限读取 Nginx 配置文件和写入证书文件 🔑
- 证书更新后会自动执行重载命令,请确保命令正确 ✔️
- 定期检查证书状态,确保证书有效 🔎
克隆仓库
git clone https://github.com/Youngxj/SSL-Assistant.git
cd SSL-Assistant编译项目
go build -o ssl_assistant将可执行文件添加到系统路径或直接 ./ssl_assistant init 运行
项目内置单元测试(Nginx 配置解析、数据库双实现 CRUD、Certd 接口、配置缓存),SQLite 与 BadgerDB 两种模式均可运行:
go test ./... # 默认 CGO 模式(SQLite)
CGO_ENABLED=0 go test ./... # 纯 Go 模式(BadgerDB)GitHub Actions(.github/workflows/go.yml)会在 push 到 main 或提交 PR 时自动运行双模式测试与 go vet;推送 v* tag 时测试通过后自动发布 Release。
goreleaser release --snapshotCGO主要用于Sqlite3数据库
go env -w CGO_ENABLED=1如果不使用Sqlite3数据库,则会自动使用BadgerDB数据库
