Files
nginxserver/memory/session-20260611-2.md
2026-07-16 13:03:11 +08:00

77 lines
3.3 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.
---
name: session-20260611-2
description: 2026-06-11 第2次会话 — Let's Encrypt证书管理全栈实现
metadata:
type: session
date: 2026-06-11
sessionNumber: 2
startTime: 2026-06-11T22:00+08:00
endTime: 2026-06-11T22:40+08:00
---
# 2026-06-11 第2次会话
## 会话摘要
为 zgitm.com阿里云购买域名实现 Let's Encrypt DNS-01 证书管理全栈功能:
- acme.sh + 阿里云 DNS API 自动签发/续期
- 系统内置域名保护(不可在页面创建/修改/删除)
- 证书管理独立页面(签发/续期/通知设置)
- Java 端 @Scheduled 定时任务到期前15天每日10点发邮件提醒连续15天
- 邮件通过 Mokee Gateway 对外开放 API 发送systemCode: nginxServer
## 关键操作
### 数据库变更
- `certificates` 表新增字段: cert_type, notify_email, notify_enabled, notify_days_before, last_renew_time, renew_log
- 新建 `cert_notify_log` 表: 记录通知发送日志
- 插入 zgitm.com / www.zgitm.com 为 letsencrypt 类型证书
### 服务器 (10.1.1.160)
- 安装 acme.sh v3.1.4GitHub clone绕过 get.acme.sh 被墙)
- 设置默认 CA: Let's Encrypt
- 阿里云 AccessKey 配置在 /root/.bashrc: Ali_Key / Ali_Secret
- 正式签发 zgitm.com 和 www.zgitm.com Let's Encrypt 证书
- 证书安装至 /etc/nginx/ssl/{domain}.pem + .key
- 到期时间: 2026-09-09自动续期: 2026-08-10
### Python API
- `ssl_service.py`: +约120行LE_DOMAINS 列表ensure_le_certificate()renew_le_certificate()get_le_cert_info()
- `app.py`: 新增 4 个证书管理端点 + add_rule 中系统域名拦截
### Java 后端(新建/修改共8个文件
- `Certificate.java`: 新实体
- `CertificateRepository.java`: JPA Repository
- `CertificateService.java`: CRUD + 签发 + 续期 + 通知配置
- `CertificateController.java`: /api/certificates REST API
- `CertNotifyScheduler.java`: @Scheduled(cron="0 0 10 * * ?") 每天10点检查+发邮件
- `PythonApiClient.java`: +4个证书API方法签发/续期用 certRestTemplate(210s超时)
- `ForwardingRuleService.java`: 系统域名保护(增删改拦截)
- `RestTemplateConfig.java`: 新增 certRestTemplate Bean
- `application.yml`: +gateway 配置段
### 前端(新建/修改共5个文件
- `CertManagement.vue`: 证书管理页面(列表/签发/续期/通知设置)
- `router/index.js`: +/cert-management 路由
- `MainLayout.vue`: +SSL证书管理菜单Key图标
- `nginxApi.js`: +5个证书API方法
- `NginxForwarding.vue`: 系统域名保护(操作按钮置灰+Lock图标创建时拦截
## 架构要点
- 证书签发流程: Vue → Java → Python API → acme.sh → 阿里云DNS API + Let's Encrypt
- 邮件通知: Java @Scheduled → Mokee Gateway API → 邮件发送
- 系统域名 zgitm.com/www.zgitm.com 三层保护: 前端拦截 + Java校验 + Python API拒绝
- 手动创建域名保持内部CA签发原有逻辑不变
## 配置信息
- Mokee Gateway: https://gw.server.mokee.com (gw.base-url 可配置)
- SystemCode: nginxServer
- 阿里云 AccessKey: LTAI5t98jUxLUadZM1LkaSa8 / K2HyLLXizAgvOMOa0Mzc7ebs4gbAZs
- acme.sh 路径: /root/.acme.sh/acme.sh
- 证书目录: /etc/nginx/ssl/
## 待处理
- [ ] 部署 Java 新版本到服务器并重启
- [ ] 前端构建部署
- [ ] 测试邮件通知(可临时改 cron 表达式触发)
- [ ] 确认收件人邮箱(当前默认 admin@mokee.com