This commit is contained in:
jeremygan2021
2026-03-23 00:11:03 +08:00
parent 6ce46e418c
commit beb3273a08
2 changed files with 497 additions and 25 deletions

View File

@@ -4,13 +4,29 @@
## 🎯 项目概述
本项目包含个核心脚本,用于解决 SSL 证书管理的常见痛点:
本项目包含个核心脚本,用于解决 SSL 证书管理的常见痛点:
- **新域名证书创建**:一键为新域名创建 Let's Encrypt SSL 证书
- **自动证书更新**:智能检测证书有效期并自动更新
- **环境诊断**:全面检测 ACME 挑战环境配置
- **一键管理**:简化复杂的证书管理流程
## 📋 功能特性
### 🆕 新域名证书创建 (`create_new_domain_cert.sh`)
- **交互式向导**:友好的中文交互界面,引导用户完成证书创建
- **自动安装 acme.sh**:智能检测并自动安装/升级 acme.sh 工具
- **智能验证**自动验证域名格式和端口范围1-65535
- **Webroot 自动配置**:自动创建和授权 ACME 挑战目录
- **配置冲突清理**:智能检测并清理可能存在的 nginx 配置冲突
- **证书有效性检测**:检查现有证书状态,避免重复申请
- **智能重试机制**:支持 3 次自动重试,采用指数退避策略
- **域名可达性检测**:自动检测域名 80 端口可达性
- **多方式 nginx 重载**:支持 systemctl、service、nginx -s 等多种重载方式
- **幂等性支持**:自动备份旧配置,支持重复运行
- **彩色中文日志**:详细的操作日志,便于阅读和调试
- **一键 HTTPS 配置**:自动生成 HTTP → HTTPS 强制跳转配置
- **最终验证流程**:测试 HTTPS 访问、HTTP 跳转、SSL 证书有效性
### 🔄 自动证书更新 (`update_acme_cert.sh`)
- **智能过期检测**自动检查证书剩余有效期默认30天预警
- **多种更新模式**:支持自动更新、强制更新、仅安装模式
@@ -74,7 +90,29 @@ location ^~ /.well-known/acme-challenge/ {
## 📖 使用指南
### 1. 环境诊断(推荐先运行)
### 1. 新域名证书创建
为新域名快速创建 Let's Encrypt SSL 证书:
```bash
# 交互式创建(推荐)
sudo ./create_new_domain_cert.sh
```
脚本将引导您完成以下步骤:
1. **输入域名**:例如 `example.com`
2. **输入后端端口**:例如 `3000`
3. **指定证书目录**:默认 `/etc/nginx/tls/example.com`
创建流程包括:
- 自动安装/升级 acme.sh
- 创建并授权 ACME 挑战目录
- 清理现有 nginx 配置冲突
- 申请 Let's Encrypt 证书
- 生成 HTTPS 配置
- 验证证书和跳转
### 2. 环境诊断(推荐先运行)
在使用证书更新功能前,建议先运行环境诊断脚本:
@@ -96,7 +134,7 @@ sudo ./acme_test.sh example.com /var/www/letsencrypt
- ✅ HTTP 访问可用性
- ✅ 端口监听状态
### 2. 证书更新
### 3. 证书更新
#### 基本用法
```bash
@@ -127,7 +165,7 @@ sudo ./update_acme_cert.sh
8. **Nginx 重载**:使新证书生效
9. **最终验证**:确认证书安装成功
### 3. 配置文件
### 4. 配置文件
#### 主要配置项
编辑脚本文件修改以下配置:
@@ -154,6 +192,28 @@ LOG_FILE="/var/log/acme_update.log"
- **自定义 CA**:修改 `--server` 参数
- **通知设置**:可集成邮件/Webhook 通知
### 新域名证书创建脚本配置项
`create_new_domain_cert.sh` 的主要配置项:
```bash
# acme.sh 路径
ACME_SH="/root/.acme.sh/acme.sh"
# ACME 挑战目录
WEBROOT="/var/www/letsencrypt"
# Nginx 配置目录
NGINX_CONF_DIR="/etc/nginx/conf.d"
# Nginx sites 目录
NGINX_AVAILABLE="/etc/nginx/sites-available"
NGINX_ENABLED="/etc/nginx/sites-enabled"
# 管理员邮箱(用于 acme.sh
EMAIL="admin@$(hostname -f)"
```
## 🔧 高级功能
### 证书指纹验证