Files
ssl-manager/README.md
T
2026-04-08 17:52:38 +08:00

204 lines
5.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 🔒 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. 安装后端
```bash
cd ssl-manager/backend
# 配置淘宝 npm 镜像(加速下载)
npm config set registry https://registry.npmmirror.com
# 安装依赖
npm install
# 复制环境配置
cp .env.example .env
# 编辑配置
vim .env
# 启动服务
npm start
```
### 3. 安装前端
```bash
cd ssl-manager/frontend
# 配置淘宝 npm 镜像(加速下载)
npm config set registry https://registry.npmmirror.com
# 安装依赖
npm install
# 开发模式
npm run dev
# 生产构建
npm run build
```
### 4. 配置自动续期
```bash
# 添加执行权限
chmod +x scripts/auto-renew.sh
# 编辑 crontab
crontab -e
# 添加定时任务(每天凌晨执行)
0 0 * * * /root/.openclaw/workspace/ssl-manager/scripts/auto-renew.sh
```
## 🔧 配置说明
### 环境变量 (.env)
```bash
# 服务端口
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 |
## 🚀 快速开始
1. 启动服务:`./scripts/start-ssl-manager.sh start`
2. 访问 http://localhost:3000
3. 在"申请新证书"页面填写域名
4. 选择验证方式,查看自动生成的 DNS 配置指南
5. 提交申请,等待证书签发
## 📋 DNS 配置指南
不管你的域名在哪里注册(阿里云、腾讯云、Cloudflare、GoDaddy 等),在申请证书时会自动展示:
- **需要的 DNS 记录**(主机记录、类型、记录值、TTL)
- **配置步骤**(一步步指导)
- **服务商控制台位置**(快速跳转)
- **API 凭证说明**(如何获取)
详见:[DNS_GUIDE.md](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
```
## 🔒 安全建议
1. **HTTPS 访问** - 生产环境务必使用 HTTPS
2. **防火墙** - 仅开放必要端口
3. **权限控制** - 限制 acme.sh 的执行权限
4. **凭证加密** - DNS API 密钥加密存储
5. **定期备份** - 备份证书和数据库
## 🐛 常见问题
### 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](https://github.com/acmesh-official/acme.sh) - ACME 客户端
- [Let's Encrypt](https://letsencrypt.org/) - 免费 SSL 证书
- [Vue.js](https://vuejs.org/) - 前端框架
- [Element Plus](https://element-plus.org/) - UI 组件库
---
**开发**: 小弟 👋
**日期**: 2026-04-07