8.0 KiB
8.0 KiB
ACME SSL 证书自动管理工具集
一个功能强大的 ACME SSL 证书自动管理工具集合,专为 Nginx 服务器环境设计,提供证书更新、环境诊断和自动化管理功能。
🎯 项目概述
本项目包含三个核心脚本,用于解决 SSL 证书管理的常见痛点:
- 自动证书更新:智能检测证书有效期并自动更新
- 环境诊断:全面检测 ACME 挑战环境配置
- 一键管理:简化复杂的证书管理流程
📋 功能特性
🔄 自动证书更新 (update_acme_cert.sh)
- 智能过期检测:自动检查证书剩余有效期(默认30天预警)
- 多种更新模式:支持自动更新、强制更新、仅安装模式
- Nginx 集成:自动解析 Nginx 配置文件,提取证书路径
- 权限管理:自动设置正确的文件权限和所有者
- 安全验证:证书内容验证和指纹检查
- 彩色日志:中文彩色输出,便于阅读和调试
- 完整日志:详细的操作日志记录到
/var/log/acme_update.log
🔍 环境诊断 (acme_test.sh)
- DNS 解析检查:验证域名解析是否正确指向服务器
- Webroot 权限测试:检测挑战文件写入权限
- Nginx 配置检查:验证 ACME 挑战 location 规则
- HTTP 访问测试:模拟 Let's Encrypt 验证过程
- 网络连通性:检测端口监听和外部访问
- 智能清理:自动清理测试文件
🛠️ 核心优势
- 零配置依赖:自动检测和适配现有环境
- 错误恢复:详细的错误提示和解决方案建议
- 安全加固:遵循最佳安全实践
- 中文友好:完整的中文界面和日志输出
- 生产就绪:经过充分测试,适用于生产环境
🚀 快速开始
环境要求
- 操作系统:Linux (Ubuntu/CentOS/Debian 等)
- 权限要求:root 权限或 sudo 访问
- 依赖软件:
- Nginx Web 服务器
- acme.sh 证书工具
- curl、openssl、grep 等基础工具
安装步骤
- 克隆项目
git clone <项目地址>
cd acme-ssl-manager
- 设置执行权限
chmod +x *.sh
- 安装 acme.sh(如果尚未安装)
curl https://get.acme.sh | sh
- 配置 Nginx 确保您的 Nginx 配置包含 ACME 挑战 location 规则:
location ^~ /.well-known/acme-challenge/ {
allow all;
root /var/www/letsencrypt;
}
📖 使用指南
1. 环境诊断(推荐先运行)
在使用证书更新功能前,建议先运行环境诊断脚本:
# 交互式模式
sudo ./acme_test.sh
# 直接指定域名
sudo ./acme_test.sh example.com
# 指定域名和Webroot
sudo ./acme_test.sh example.com /var/www/letsencrypt
诊断脚本将检查:
- ✅ DNS 解析是否正确
- ✅ Webroot 目录权限
- ✅ Nginx 配置完整性
- ✅ HTTP 访问可用性
- ✅ 端口监听状态
2. 证书更新
基本用法
# 交互式更新
sudo ./update_acme_cert.sh
# 直接更新指定域名(需要修改脚本)
# 编辑脚本设置 DOMAIN 变量
操作模式
脚本运行时会根据证书状态提供不同选项:
- 证书即将过期(<30天):自动执行更新
- 证书仍有效:提供三个选项
- 强制更新:重新颁发证书
- 仅安装:跳过更新,仅安装现有证书
- 退出:不做任何操作
更新流程
- 权限检查:验证 root 权限
- 域名输入:交互式输入目标域名
- 配置解析:自动查找 Nginx 配置文件
- 证书检测:检查当前证书有效期
- 证书更新:使用 acme.sh 颁发新证书
- 证书安装:安装到指定位置
- 权限设置:设置正确的文件权限
- Nginx 重载:使新证书生效
- 最终验证:确认证书安装成功
3. 配置文件
主要配置项
编辑脚本文件修改以下配置:
# acme.sh 路径
ACME_SH="/root/.acme.sh/acme.sh"
# Nginx 配置目录
NGINX_CONF_DIR="/etc/nginx/conf.d"
# Webroot 路径
WEBROOT="/var/www/letsencrypt"
# 证书存储目录
TLS_BASE_DIR="/etc/nginx/tls"
# 日志文件
LOG_FILE="/var/log/acme_update.log"
高级配置
- 强制更新:设置
FORCE_RENEW="true" - 自定义 CA:修改
--server参数 - 通知设置:可集成邮件/Webhook 通知
🔧 高级功能
证书指纹验证
支持自定义证书指纹验证:
# 在 verify_cert_success 函数中启用指纹检查
if grep -q "YOUR_FINGERPRINT" "$cert_file"; then
log_info "✅ 证书指纹验证通过"
return 0
fi
多域名支持
支持通配符域名和多域名证书:
# 修改 renew_certificate 函数
local cmd="$ACME_SH --issue -d $DOMAIN -d *.${DOMAIN} --webroot $WEBROOT"
自动续期
设置定时任务实现自动续期:
# 编辑 crontab
crontab -e
# 添加以下内容(每天凌晨检查)
0 2 * * * /path/to/update_acme_cert.sh >> /var/log/acme_cron.log 2>&1
📊 日志和监控
日志文件
- 更新日志:
/var/log/acme_update.log - 定时任务日志:
/var/log/acme_cron.log
日志格式
[INFO] 2026-03-03 10:30:45 - 目标域名: example.com
[步骤] 2026-03-03 10:30:45 - 解析配置文件,提取证书路径...
[警告] 2026-03-03 10:30:45 - 证书即将过期(<30天),需要更新
监控建议
- 日志轮转:配置 logrotate 管理日志文件
- 监控告警:监控日志中的错误关键词
- 证书监控:设置证书有效期监控告警
🐛 故障排除
常见问题
1. DNS 解析失败
# 检查域名解析
dig +short your-domain.com
# 或
nslookup your-domain.com
2. Webroot 权限问题
# 修正权限
sudo chown -R www-data:www-data /var/www/letsencrypt
sudo chmod -R 755 /var/www/letsencrypt
3. Nginx 配置错误
# 检查 Nginx 配置
sudo nginx -t
# 重载配置
sudo service nginx force-reload
4. 端口未监听
# 检查端口监听
sudo ss -tlnp | grep ':80'
# 检查防火墙
sudo ufw status
sudo iptables -L
5. acme.sh 未安装
# 安装 acme.sh
curl https://get.acme.sh | sh
# 重新加载环境
source ~/.bashrc
错误代码说明
| 错误类型 | 说明 | 解决方案 |
|---|---|---|
| DNS 解析不一致 | 域名解析 IP 与服务器 IP 不匹配 | 检查 DNS 设置,确认域名指向正确 |
| Webroot 写入失败 | 无法写入挑战文件 | 检查目录权限和磁盘空间 |
| HTTP 访问失败 | 无法通过 HTTP 访问挑战文件 | 检查 Nginx 配置和端口监听 |
| 证书颁发失败 | acme.sh 无法颁发证书 | 检查域名解析、Webroot 配置 |
🔒 安全考虑
文件权限
- 证书文件:设置为 600(仅所有者可读写)
- 所有者:设置为 www-data(Nginx 运行用户)
- 目录权限:Webroot 目录设置为 755
最佳实践
- 定期更新:及时更新证书避免过期
- 监控告警:设置证书有效期监控
- 备份配置:定期备份 Nginx 配置和证书
- 访问控制:限制对证书目录的访问
- 日志审计:定期检查操作日志
🤝 贡献指南
欢迎提交 Issue 和 Pull Request!
开发规范
- 遵循 Bash 最佳实践
- 添加适当的错误处理
- 保持中文界面友好
- 更新相关文档
测试要求
- 在多种 Linux 发行版上测试
- 验证不同 Nginx 配置场景
- 测试错误处理和恢复机制
📄 许可证
本项目采用 MIT 许可证 - 详见 LICENSE 文件
🙏 致谢
- acme.sh - 优秀的 ACME 客户端
- Let's Encrypt - 提供免费 SSL 证书
- Nginx - 高性能 Web 服务器
📞 支持
如有问题或建议,请通过以下方式联系:
- 提交 Issue
- 发送邮件至:[your-email@example.com]
- 访问项目主页:[项目地址]
⭐ 如果这个项目对您有帮助,请给我们一个 Star!