# Scert - SSL 证书全生命周期自动化管理系统
现代化、安全可靠的企业级 SSL/TLS 证书自动化申请、续期、监控、分发与部署系统
--- ## 🌟 项目简介 **Scert** 是一款面向现代化运维环境的高性能 SSL/TLS 证书全生命周期管理系统。支持 ACME 协议与主流云厂商 DNS 自动化联动,提供多域名/泛域名申请、到期监控巡检、多主机/多集群自动推送部署、安全回滚以及基于角色的多项目访问控制。 系统采用 **Go (Gin)** 高性能服务端与 **Vue 3** 响应式管理前端,支持 **Linux** 与 **Windows** 原生服务化部署,支持 SQLite、MySQL、PostgreSQL 三种企业级数据库存储引擎。 --- ## 🚀 核心特性 - **ACME 自动化签发与续期** - 支持 Let's Encrypt 等合规 ACME CA 机构。 - 支持单域名、多域名、泛域名(支持多级子域名与主泛合并)申请。 - 自动化 DNS-01 验证(原生支持阿里云 DNS、腾讯云 DNSPod、华为云 DNS、AWS Route53 等主流 DNS 提供商)及 HTTP-01 验证。 - **证书智能分发与自动部署** - 支持一键或定时将证书推送到远端服务器(通过安全 SSH/SFTP 协议)。 - 支持目标服务器 Nginx / Web 服务自动重载与 HTTPS 状态存活复核校验。 - 具备原子部署事务保护,当部署失败或校验未通过时自动触发安全回滚,保障现有生产业务不受中断。 - **多数据库引擎支持** - 原生支持 **SQLite**(轻量自包含)、**MySQL** (5.7/8.0+)、**PostgreSQL** (12+)。 - 初始化向导提供数据库连接测试、自动表结构迁移与数据一致性检查。 - **多租户与多项目权限管理** - 支持细粒度角色权限(超级管理员、管理员、普通用户)。 - 支持多项目隔离管理,证书、域名、服务器资产按项目权限范围安全受控。 - **全方位告警与系统通知** - 支持内置 SMTP 邮件推送与邮件验证码安全验证。 - 支持证书临期告警(支持自定义告警阈值,如 30 天/15 天/7 天)、签发失败告警及部署异常告警。 - **生产级安全体系** - 敏感凭据(DNS API Key/Secret、SSH 私钥等)基于主密钥进行高强度加密存储(AES-GCM / 保护密钥隔离)。 - 生产运维边界严格受控,仅允许受信任的反向代理提供标准 HTTPS 访问,内部服务端口默认仅绑定回环地址(127.0.0.1)。 --- ## 🏗️ 架构与技术栈 ### 技术栈选型 - **后端架构 (Backend)**: - 核心语言:**Go 1.26+** - Web 框架:**Gin** - ACME 库:**lego/v5** - 数据库引擎:`modernc.org/sqlite`、`go-sql-driver/mysql`、`jackc/pgx/v5` - 命令行体系:**Cobra** - **前端架构 (Frontend)**: - 框架:**Vue 3** (Composition API) - 构建工具:**Vite** - 样式设计:原生模块化 CSS,遵循现代规范的组件化与卡片式视觉风格 - **CI/CD 与运维 (DevOps)**: - CI/CD:统一的 GitHub Actions / Gitea Actions 工作流,支持全架构矩阵编译与自动化打包发布。 - 系统服务:Linux Systemd / Windows Service 原生守护进程。 --- ## 📁 目录结构 ```text Scert/ ├── .github/ │ └── workflows/ │ └── release.yml # CI/CD 自动化多平台打包发布工作流 ├── backend/ # Go 后端工程 │ ├── cmd/ │ │ ├── scert/ # 核心服务入口 │ │ ├── scert-admin/ # 超级管理员与运维重置入口 │ │ ├── scert-nginx/ # Nginx 辅助管理程序 │ │ ├── scert-release/ # 离线归档辅助工具 │ │ └── scert-storage/ # 证书安全存储与挂载辅助 │ ├── internal/ # 业务核心逻辑(ACME、DNS、部署、存储、通知) │ └── go.mod ├── frontend/ # Vue 3 前端工程 │ ├── src/ │ │ ├── views/ # 页面视图组件(Dashboard, UserManagement, SetupWizard 等) │ │ ├── components/ # 公共基础组件 │ │ └── App.vue │ └── package.json ├── deploy/ # 部署脚本与配置文件模板 │ ├── install-linux.sh # Linux 一键安装与升级脚本 │ ├── install-windows.ps1 # Windows PowerShell 一键安装脚本 │ ├── package.mjs # 规范发布包打包脚本 │ ├── nginx/ # Nginx 反向代理配置样例 │ └── systemd/ # Systemd 服务与 Socket 定义 ├── doc/ # 项目技术规范、接口说明与运维执行清单 └── README.md # 项目主文档 ``` --- --- ## 📖 核心 API 规范与接口说明 Scert 遵循 RESTful 设计标准,前后端交互采用 JSON 格式,凭据与敏感字段全量脱敏入库,写操作经过严格的同源保护(Same-Origin Check)。 详细接口契约、参数定义、权限约束及返回示例参见文档:[《Scert 后端接口说明文档》(doc/后端接口说明文档.md)](doc/后端接口说明文档.md)。 ### 主要 API 模块概览 1. **系统初始化与状态就绪 (Bootstrap API)**: - GET /readyz / GET /healthz:系统运行探针与服务健康度检查。 - GET /api/v1/setup/status:获取当前向导初始化进度及配置项状态。 - POST /api/v1/setup:提交并初始化超级管理员账号、数据库连接及系统配置。 2. **认证与当前会话 (Auth & Session API)**: - POST /api/v1/auth/login / POST /api/v1/auth/logout:用户登录与安全登出。 - GET /api/v1/user/info:获取当前登录用户基本信息、所属项目与角色权限。 3. **用户与权限控制 (User Management API)**: - 支持超级管理员对平台成员进行增删改查、状态启停(启用/禁用)及角色授权。 4. **项目与多租户协作 (Project Management API)**: - 支持项目资源隔离(项目资产独享)、成员角色(项目管理员、成员)细粒度分配。 5. **托管域名与证书生命周期 (Domains & Certificates API)**: - 域名的添加、修改、删除、泛域名/多级子域名支持。 - 证书自动化申请 (issue)、在线校验 (alidate)、手动导入 (import)、历史版本查看与回滚 (history/rollback)。 6. **远程部署与目标服务器 (Servers & Deployments API)**: - SSH/SFTP 目标服务器纳管、主机指纹核验与免密连接。 - 证书远程下发、Nginx 重载与原子回滚保护。 7. **DNS 账户与凭据配置 (DNS Accounts API)**: - 多云厂商(阿里云、腾讯云等)DNS AccessKey 统一安全存储与项目归属绑定。 8. **异步任务与审计日志 (Tasks & Audit Logs API)**: - 全局异步任务轮询、日志查看、执行明细报告与终止操作。 9. **系统全局设置 (System Settings API)**: - 全局 SMTP 邮件通知配置、邮件模板测试及证书续期轮询周期策略配置。 ## 🛠️ 本地开发与构建 ### 1. 环境准备 - **Go**:>= 1.26 - **Node.js**:>= 24 - **npm**:>= 11 ### 2. 前端开发与构建 ```bash cd frontend # 安装依赖 npm ci # 启动本地开发热更新服务器 npm run dev # 运行前端全量单元测试 npm test # 编译前端生产静态资源 npm run build ``` ### 3. 后端编译与启动 ```bash cd backend # 编译服务端可执行文件 go build -trimpath -o ../bin/scert ./cmd/scert go build -trimpath -o ../bin/scert-admin ./cmd/scert-admin # 启动服务端(默认读取配置并初始化) ../bin/scert serve ``` --- ## 📦 发布包制作与 CI/CD 项目配备统一的打包脚本 `deploy/package.mjs`,产物严格遵循 **`项目名+版本+架构`** 的命名规范: ```bash # 打包 Linux amd64 归档包 (生成 Scert_v1.52.5_linux_amd64.tar.gz) node deploy/package.mjs --target=linux_amd64 --version=v1.52.5 # 打包 Windows amd64 压缩包 (生成 Scert_v1.52.5_windows_amd64.zip) node deploy/package.mjs --target=windows_amd64 --version=v1.52.5 ``` 发布包内包含: - `scert` / `scert-admin`(Linux 下含 `scert-nginx` 与 `scert-storage`) - `web/` 编译好的前端生产静态资源 - `install-linux.sh` / `install-windows.ps1` - `systemd/` 与 `nginx/` 配置示例模板 - `SHA256SUMS` 完整性校验文件 推送版本标签(例如 `git tag v1.52.5 && git push Scert v1.52.5`)后,GitHub 与 Gitea 会自动触发 Actions 矩阵编译,生成各架构的发布包并自动挂载至 Release 资产清单中。 --- ## 💻 生产环境部署 ### Linux (Ubuntu / Debian / CentOS / Rocky) 1. 从 Release 页面下载对应架构的发布包并解压: ```bash tar -zxvf Scert_v1.52.5_linux_amd64.tar.gz cd Scert_v1.52.5_linux_amd64 ``` 2. 执行安装脚本: ```bash chmod +x install-linux.sh scert scert-admin sudo ./install-linux.sh --source-dir . ``` 3. 启动并配置服务: ```bash sudo systemctl daemon-reload sudo systemctl enable Scert sudo systemctl start Scert ``` 4. 配置 Nginx 反向代理将标准 HTTPS 流量转发至 `127.0.0.1:8443`(参考 `nginx/Scert.conf.example`)。 ### Windows 1. 解压 `Scert_v1.52.5_windows_amd64.zip`。 2. 以管理员权限启动 PowerShell 并执行: ```powershell powershell -ExecutionPolicy Bypass -File .\install-windows.ps1 -SourceDirectory . ``` 3. 服务将自动注册为 Windows 守护进程运行。 --- ## 📄 开源与许可证 本项目所有权属于原开发团队。遵循安全合规及企业授权协议分发使用。