70a2ca66f3263786a1f17b1e877b2b74e274032a
🔒 SSL 证书管理器
基于 acme.sh 的 Web 界面 SSL 证书自动化管理工具,支持 Let's Encrypt 免费证书的申请、管理和自动续期。
✨ 功能特性
- 🌐 Web 界面 - 直观易用的管理界面,无需命令行
- 🔐 双验证方式 - 支持 HTTP-01 和 DNS-01 验证
- 🌍 多 DNS 服务商 - 支持 Cloudflare、阿里云、腾讯云等 10+ 服务商
- 📋 DNS 配置指南 - 自动展示 DNS 解析配置,不管域名在哪里注册
- 🔄 自动续期 - 内置 cron 脚本,证书到期前自动续期
- 📊 证书监控 - 实时查看证书状态和过期时间
- 🔑 安全存储 - DNS API 凭证加密存储
🏗️ 技术栈
后端:
- Node.js + Express
- SQLite 数据库
- acme.sh 封装
前端:
- Vue 3 + Vite
- Element Plus UI
- Pinia 状态管理
📦 安装部署
1. 前置要求
- Node.js 18+
- acme.sh(会自动从 Gitee 镜像安装)
- Git(用于克隆 acme.sh)
- Linux 服务器(推荐 Ubuntu/CentOS)
2. 安装后端
cd ssl-manager/backend
# 配置淘宝 npm 镜像(加速下载)
npm config set registry https://registry.npmmirror.com
# 安装依赖
npm install
# 复制环境配置
cp .env.example .env
# 编辑配置
vim .env
# 启动服务
npm start
3. 安装前端
cd ssl-manager/frontend
# 配置淘宝 npm 镜像(加速下载)
npm config set registry https://registry.npmmirror.com
# 安装依赖
npm install
# 开发模式
npm run dev
# 生产构建
npm run build
4. 配置自动续期
# 添加执行权限
chmod +x scripts/auto-renew.sh
# 编辑 crontab
crontab -e
# 添加定时任务(每天凌晨执行)
0 0 * * * /root/.openclaw/workspace/ssl-manager/scripts/auto-renew.sh
🔧 配置说明
环境变量 (.env)
# 服务端口
PORT=3000
# ACME 配置
ACME_PATH=/root/.acme.sh
CERT_DIR=/etc/ssl/certs
ACME_EMAIL=your-email@example.com
# 加密密钥(32 字符)
ENCRYPTION_KEY=your-secret-key-here
支持的 DNS 服务商
| 服务商 | 环境变量 |
|---|---|
| Cloudflare | CF_Key, CF_Email |
| 阿里云 | Ali_Key, Ali_Secret |
| 腾讯云 | Tencent_SecretId, Tencent_SecretKey |
| GoDaddy | GD_Key, GD_Secret |
| NameSilo | Namesilo_Key |
| Namecheap | Namecheap_ApiKey |
| DNSPod | DP_Id, DP_Key |
| AWS Route53 | AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY |
| Google Cloud | GCP_PROJECT |
| Azure DNS | AZURE_TENANT_ID, AZURE_CLIENT_ID, AZURE_CLIENT_SECRET |
🚀 快速开始
- 启动服务:
./scripts/start-ssl-manager.sh start - 访问 http://localhost:3000
- 在"申请新证书"页面填写域名
- 选择验证方式,查看自动生成的 DNS 配置指南
- 提交申请,等待证书签发
📋 DNS 配置指南
不管你的域名在哪里注册(阿里云、腾讯云、Cloudflare、GoDaddy 等),在申请证书时会自动展示:
- 需要的 DNS 记录(主机记录、类型、记录值、TTL)
- 配置步骤(一步步指导)
- 服务商控制台位置(快速跳转)
- API 凭证说明(如何获取)
详见:DNS_GUIDE.md
📁 项目结构
ssl-manager/
├── backend/
│ ├── src/
│ │ ├── routes/ # API 路由
│ │ ├── services/ # 业务逻辑
│ │ ├── utils/ # 工具函数
│ │ └── index.js # 入口文件
│ ├── data/ # SQLite 数据库
│ └── .env # 环境配置
├── frontend/
│ ├── src/
│ │ ├── views/ # 页面组件
│ │ ├── components/ # 通用组件
│ │ ├── api/ # API 客户端
│ │ ├── stores/ # 状态管理
│ │ └── router/ # 路由配置
│ └── dist/ # 构建输出
├── scripts/
│ └── auto-renew.sh # 自动续期脚本
└── README.md
🔒 安全建议
- HTTPS 访问 - 生产环境务必使用 HTTPS
- 防火墙 - 仅开放必要端口
- 权限控制 - 限制 acme.sh 的执行权限
- 凭证加密 - DNS API 密钥加密存储
- 定期备份 - 备份证书和数据库
🐛 常见问题
Q: 证书申请失败?
A: 检查域名 DNS 解析是否正确,确保服务器可访问 80 端口(HTTP-01)或 DNS API 凭证正确(DNS-01)。
Q: 不知道域名在哪里注册?
A: 使用 whois 你的域名 命令查询,或在 SSL Manager 的 DNS 配置指南中查看各服务商的控制台链接。
Q: DNS 记录添加后多久生效?
A: 通常 1-10 分钟,取决于 TTL 设置和 DNS 服务商。
Q: 自动续期不工作?
A: 检查 cron 服务是否运行,查看日志 /var/log/ssl-manager/renew.log。
Q: 如何添加更多 DNS 服务商?
A: 编辑 backend/src/services/acme-service.js 中的 DNS_PROVIDERS 对象。
📝 License
MIT
🙏 致谢
- acme.sh - ACME 客户端
- Let's Encrypt - 免费 SSL 证书
- Vue.js - 前端框架
- Element Plus - UI 组件库
开发: 小弟 👋
日期: 2026-04-07
Opis
Languages
Vue
54.9%
JavaScript
34%
Shell
10.8%
HTML
0.3%