Let's Encrypt 证书申请脚本
这是一个简化的Let's Encrypt证书申请脚本,支持多域名配置和交互式菜单选择。
功能特性
支持多域名证书申请
交互式菜单选择,可单独处理特定域名
自动创建webroot验证目录
自定义证书文件命名
详细的日志记录
兼容旧版本配置格式
配置文件说明
配置文件 config.json
支持以下格式:
{
"domains": [
{
"domain": "mancxi.cn",
"email": "admin@mancxi.cn",
"webroot_path": "/var/www/halo",
"certbot_path": "/usr/bin/certbot",
"cert_dir": "/etc/letsencrypt/live",
"download_dir": "/var/www/halo",
"cert_files": {
"key_name": "mancxi.cn.key",
"pem_name": "mancxi.cn.pem"
}
},
{
"domain": "file.mancxi.cn",
"email": "admin@mancxi.cn",
"webroot_path": "/var/www/Clou",
"certbot_path": "/usr/bin/certbot",
"cert_dir": "/etc/letsencrypt/live",
"download_dir": "/var/www/Clou",
"cert_files": {
"key_name": "file.mancxi.cn.key",
"pem_name": "file.mancxi.cn.pem"
}
}
],
"auto_renew_days": 30,
"log_file": "letsencrypt.log"
}
使用方法
确保已安装certbot:
sudo yum install epel-release sudo yum install certbot
确保证书的webroot目录存在且有写入权限:
sudo mkdir -p /var/www/Clou sudo chown -R www-data:www-data /var/www/Clou
运行脚本:
python3 letsencrypt_simple.py
根据菜单提示选择操作:
输入
1
处理第一个域名 (mancxi.cn)输入
2
处理第二个域名 (file.mancxi.cn)输入
q
退出程序
菜单界面示例
==================================================
Let's Encrypt 证书申请工具
==================================================
请选择要处理的域名:
0. 处理所有域名
1. mancxi.cn (下载到: /var/www/halo)
2. file.mancxi.cn (下载到: /var/www/Clou)
q. 退出
--------------------------------------------------
请输入选择 (0-2 或 q):
证书文件
脚本会自动下载以下证书文件到指定的下载目录:
mancxi.cn
mancxi.cn.key
- 私钥文件mancxi.cn.pem
- 证书链文件
file.mancxi.cn
file.mancxi.cn.key
- 私钥文件file.mancxi.cn.pem
- 证书链文件
日志
所有操作日志会记录到 letsencrypt.log
文件中,同时也会在控制台显示。
注意事项
确保域名已正确解析到服务器IP
确保webroot目录可以通过HTTP访问
确保防火墙允许80端口访问(用于域名验证)
脚本会自动创建
.well-known/acme-challenge
目录可以单独处理特定域名,避免影响其他域名的证书
SSL证书自动更新脚本
这是一个自动检查和更新SSL证书的脚本,当证书剩余天数少于指定天数时自动更新。
功能特性
自动检查证书剩余天数
支持多域名配置
守护进程模式,持续监控
单次检查模式
指定域名检查
详细的日志记录
自动下载更新后的证书文件
使用方法
1. 基本使用
# 检查所有域名,默认3天阈值
python3 auto_renew_ssl.py
# 指定最小剩余天数
python3 auto_renew_ssl.py --min-days 7
# 检查指定域名
python3 auto_renew_ssl.py --domain file.mancxi.cn
# 使用自定义配置文件
python3 auto_renew_ssl.py --config my_config.json
2. 守护进程模式
# 启动守护进程,每小时检查一次
python3 auto_renew_ssl.py --daemon
# 自定义检查间隔(30分钟)
python3 auto_renew_ssl.py --daemon --interval 1800
# 自定义最小剩余天数
python3 auto_renew_ssl.py --daemon --min-days 5 --interval 7200
3. 设置为系统服务
修改服务文件路径:
# 编辑 ssl-auto-renew.service 文件 # 将 /path/to/your/script/directory 替换为实际路径
安装服务:
sudo cp ssl-auto-renew.service /etc/systemd/system/ sudo systemctl daemon-reload sudo systemctl enable ssl-auto-renew.service sudo systemctl start ssl-auto-renew.service
管理服务:
# 查看服务状态 sudo systemctl status ssl-auto-renew.service # 查看日志 sudo journalctl -u ssl-auto-renew.service -f # 停止服务 sudo systemctl stop ssl-auto-renew.service # 重启服务 sudo systemctl restart ssl-auto-renew.service
命令行参数
参数 | 说明 | 默认值 |
---|---|---|
| 配置文件路径 |
|
| 最小剩余天数 |
|
| 运行守护进程模式 |
|
| 检查间隔(秒) |
|
| 指定域名 | 无 |
日志文件
脚本日志:
ssl_renew.log
系统服务日志:
journalctl -u ssl-auto-renew.service
工作流程
检查证书剩余天数:使用
openssl
命令检查证书过期时间判断是否需要更新:如果剩余天数少于指定阈值,则开始更新
更新证书:使用
certbot
强制更新证书下载证书文件:将更新后的证书文件复制到指定目录
记录日志:详细记录所有操作过程
示例输出
2024-01-15 10:00:00 - INFO - 开始检查所有域名证书,最小剩余天数: 3 天
2024-01-15 10:00:01 - INFO - 检查第 1/2 个域名
2024-01-15 10:00:01 - INFO - 检查域名: mancxi.cn
2024-01-15 10:00:02 - INFO - 域名 mancxi.cn 证书剩余天数: 45 天
2024-01-15 10:00:02 - INFO - 域名 mancxi.cn 证书还有 45 天,无需更新
2024-01-15 10:00:02 - INFO - 检查第 2/2 个域名
2024-01-15 10:00:02 - INFO - 检查域名: file.mancxi.cn
2024-01-15 10:00:03 - INFO - 域名 file.mancxi.cn 证书剩余天数: 2 天
2024-01-15 10:00:03 - WARNING - 域名 file.mancxi.cn 证书剩余 2 天,少于 3 天,开始更新...
2024-01-15 10:00:05 - INFO - 域名 file.mancxi.cn 证书更新成功!
2024-01-15 10:00:06 - INFO - 成功下载 2 个证书文件到 /var/www/Clou
2024-01-15 10:00:06 - INFO - 域名 file.mancxi.cn 证书更新完成!
2024-01-15 10:00:06 - INFO - 所有域名检查完成! 成功处理: 2/2
注意事项
确保
certbot
已正确安装确保有足够的权限访问证书目录
确保域名解析正确且80端口可访问
建议在生产环境中使用守护进程模式
定期检查日志文件确保脚本正常运行
故障排除
证书更新失败:
检查域名解析是否正确
确认80端口是否开放
查看详细错误日志
权限问题:
确保脚本有读取证书文件的权限
确保有写入下载目录的权限
服务无法启动:
检查服务文件路径是否正确
确认Python路径是否正确
查看系统日志获取详细错误信息