核心问题:
- 当证书已存在时,acme.sh会报错"Domains not changed"并拒绝申请
- Certbot同样会拒绝重复申请已有的证书
- 导致用户重新运行脚本时SSL部署总是失败
解决方案:
1. acme.sh方案:
- 申请失败后检查证书是否已在证书列表中
- 如果已存在,直接使用现有证书进行安装
- 避免不必要的重复申请
2. Certbot方案:
- 申请失败后检查 /etc/letsencrypt/live/${DOMAIN} 目录
- 如果证书文件存在,直接创建软链接到nginx目录
- 保证证书可以正常使用
3. 应用范围:
- deploy_certbot() - Certbot方案
- deploy_acme_letsencrypt() - acme.sh + Let's Encrypt
- deploy_acme_zerossl() - acme.sh + ZeroSSL
- deploy_acme_buypass() - acme.sh + Buypass
优点:
- ✅ 支持重复运行脚本而不报错
- ✅ 充分利用已有的有效证书
- ✅ 减少对CA服务器的请求压力
- ✅ 避免触发速率限制
用户体验改进:
- 显示友好的"检测到证书已存在"提示
- 自动继续安装流程,无需用户干预
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
142 KiB
142 KiB