# ynn-letsencrypt
**Repository Path**: KyleLuo/ynn-letsencrypt
## Basic Information
- **Project Name**: ynn-letsencrypt
- **Description**: 本系统基于 ACME 协议(兼容 Let's Encrypt 等 CA),将证书的申请、验证、签发、续签、吊销、导出等环节整合为一个 Web 管理平台。用户只需输入域名、选择验证方式,即可在几分钟内完成证书签发,并一键导出适配 Nginx、Apache、Tomcat、IIS 的证书文件。
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 1
- **Created**: 2026-08-20
- **Last Updated**: 2026-08-22
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# ACME SSL 证书管家
基于 ACME 协议的 SSL 证书全生命周期管理平台(兼容 Let's Encrypt),支持域名验证、证书签发、续签、吊销、多格式导出。
## 项目简介
在 HTTPS 已成为互联网标配的今天,SSL/TLS 证书的管理仍是一件繁琐的事情——申请流程复杂、到期容易遗忘、不同服务器格式各异。
本系统基于 ACME 协议(兼容 Let's Encrypt 等 CA),将证书的申请、验证、签发、续签、吊销、导出等环节整合为一个 Web 管理平台。用户只需输入域名、选择验证方式,即可在几分钟内完成证书签发,并一键导出适配 Nginx、Apache、Tomcat、IIS 的证书文件。
**适用场景:**
- 运维团队需要对多台服务器的 SSL 证书统一管理
- 不想手动执行 `certbot` 命令,希望有图形化操作界面
- 需要定期跟踪证书到期时间,避免忘记续签导致服务中断
- 需要将证书快速部署到不同类型的 Web 服务器
**核心能力:**
- 支持单域名和泛域名 (`*.example.com`) 证书
- DNS-01 和 HTTP-01 两种域名验证方式
- 到期自动续签,无需人工干预
- 操作日志完整审计
## 功能特性
- **证书管理**: 申请、验证、签发、续签、吊销、删除
- **域名验证**: DNS-01 (推荐,支持泛域名) / HTTP-01
- **多服务器格式**: Nginx / Apache / Tomcat / IIS 一键导出
- **泛域名支持**: `*.example.com` 泛域名证书
- **自动续签**: 到期前自动续签 (定时任务)
- **操作审计**: 完整操作日志记录
## 界面截图
### 证书详情页

### 浏览器效果

## 项目结构
```
ynn-letsencrypt/
├── backend/ # Spring Boot 后端
│ └── src/main/
│ ├── java/com/ynn/letsencrypt/
│ │ ├── config/ # 配置类
│ │ ├── controller/ # REST API
│ │ ├── dto/ # 请求体
│ │ ├── entity/ # 数据库实体
│ │ ├── mapper/ # MyBatis Mapper
│ │ ├── scheduler/ # 定时任务
│ │ ├── service/ # 业务逻辑
│ │ ├── util/ # 工具类
│ │ └── vo/ # 响应体
│ └── resources/
│ ├── application.yml # 公共配置
│ ├── application-prod.yml # 生产环境
│ ├── application-test.yml # 测试环境
│ └── logback-spring.xml # 日志配置
├── frontend/ # Vue 3 前端
│ └── src/
│ ├── api/ # API 封装
│ ├── layouts/ # 布局组件
│ ├── router/ # 路由配置
│ ├── stores/ # Pinia 状态
│ ├── utils/ # 工具函数
│ └── views/ # 页面
│ ├── certificates/ # 证书管理页
│ ├── dashboard/ # 仪表盘
│ └── login/ # 登录页
├── sql/
│ └── init.sql # 数据库初始化脚本
├── 部署说明/
│ ├── run.sh # 后端启动脚本
│ ├── BACKEND.md # 后端部署说明
│ └── FRONTEND.md # 前端部署说明
├── nginx.txt # Nginx 配置参考
└── LICENSE # MIT 许可证
```
## 快速开始
### 1. 数据库
```bash
mysql -u root -p < sql/init.sql
```
默认账号: `admin` / `admin123`
> ⚠️ **安全警告**:首次登录后请**立即修改默认密码**!点击右上角头像 → 修改密码,或在左侧菜单中找到密码修改入口。生产环境务必更换为高强度密码,否则存在严重安全隐患。
### 2. 后端
```bash
cd backend
# 修改 application-prod.yml 中的数据库连接
mvn clean package -DskipTests
java -jar target/letsencrypt-1.0.0-SNAPSHOT.jar --spring.profiles.active=prod
```
### 3. 前端
```bash
cd frontend
npm install
npm run build
# 将 dist/ 部署到 Nginx
```
### 4. Nginx
参考 `nginx.txt` 配置 SSL 终端 + 反向代理。
## 技术栈
| 层 | 技术 |
|------|------|
| 后端框架 | Spring Boot 2.7.8 + Java 17 |
| ORM | MyBatis-Plus 3.5 |
| 认证 | Sa-Token 1.34 |
| ACME | acme4j 5.1 |
| 数据库 | MySQL 8.0 |
| 前端框架 | Vue 3 + Vite 5 |
| UI 库 | Element Plus 2 |
| 部署 | Nginx + SSL |
## 第三方依赖许可证
| 依赖 | 版本 | 许可证 |
|------|------|--------|
| Spring Boot | 2.7.8 | Apache 2.0 |
| MyBatis-Plus | 3.5.3.1 | Apache 2.0 |
| Sa-Token | 1.34.0 | Apache 2.0 |
| acme4j | 5.1.0 | Apache 2.0 |
| Hutool | 5.8.28 | 木兰宽松许可证 |
| Knife4j | 4.1.0 | Apache 2.0 |
| Bouncy Castle | 1.78.1 | MIT |
| MySQL Connector/J | 8.x | GPLv2 ⚠️ |
| Vue 3 | 3.x | MIT |
| Vite | 5.x | MIT |
| Element Plus | 2.x | MIT |
| Pinia | 2.x | MIT |
| Vue Router | 4.x | MIT |
| Axios | 1.x | MIT |
## 配置要点
### Let's Encrypt 环境
| 环境 | use-staging | 说明 |
|------|-------------|------|
| 测试 | `true` | 无速率限制, 证书不受信任 |
| 生产 | `false` | 真实证书, 有速率限制 |
> **速率限制**: 生产环境每个 ACME 账户 — 新订单 50 次/3 小时, 续签 5 次/周。测试阶段务必使用 staging 环境。
### 环境变量
| 变量 | 默认值 | 说明 |
|------|--------|------|
| `LETSENCRYPT_KEY_SECRET` | `changeme-...` | AES-256 私钥加密密钥, 生产必须修改 |
## 许可证说明
本项目源码以 [MIT](LICENSE) 许可证发布。
唯一例外:`mysql-connector-j` 为 **GPLv2** 许可证,与 MIT 不兼容。项目通过 Maven `provided` scope 声明此依赖——源码中不包含 GPL 代码,由用户在构建时自行从 Maven Central 获取。**如果你分发包含 MySQL Connector 的二进制包,你的分发须遵守 GPLv2 条款。** 如有顾虑,可替换为 LGPL 的 [MariaDB Connector/J](https://mariadb.com/kb/en/about-mariadb-connector-j/),API 完全兼容。
> ⚠️ **安全提醒**:`application-test.yml` 和 `application-prod.yml` 中的数据库密码为示例占位符,提交前请确保已替换为实际密码且配置文件已加入 `.gitignore`。
## 凭证
| 类型 | 默认值 | 存储方式 |
|------|--------|---------|
| 登录密码 | admin123 | BCrypt |
| ACME 账户密钥 | `./data/acme-accounts/account.key` | 明文文件 |
| 证书私钥 | 数据库 `private_key_pem` | AES-256 加密 |
## 详细文档
- [后端部署说明](部署说明/BACKEND.md)
- [前端部署说明](部署说明/FRONTEND.md)
## 免责声明
本项目 **完全由 AI 生成**,代码及文档由 Claude Code 自动编写。本系统仅供学习、研究及合法运维使用,使用者须遵守 Let's Encrypt 服务条款及相关法律法规。
如本项目无意中侵犯了您的权益,请联系我们,核实后将立即删除相关内容。
## 打赏
如果这个项目对你有帮助,欢迎打赏支持一下 ☕
| 微信 | 支付宝 |
|:---:|:---:|
|
|
|
## License
[MIT](LICENSE)