# 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` 泛域名证书 - **自动续签**: 到期前自动续签 (定时任务) - **操作审计**: 完整操作日志记录 ## 界面截图 ### 证书详情页 ![证书详情](部署说明/证书详细.png) ### 浏览器效果 ![浏览器效果](部署说明/浏览器效果.png) ## 项目结构 ``` 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)