.crt 证书文件为空导致的证书更新失败
八合一脚本 Let's Encrypt 证书修复指南
问题背景:
使用mack-a的v2гay -agent八合一脚本时,由于人为失误导致Let's Encrypt证书出现问题,
脚本自带的证书管理功能无法有效修复。
问题症状:
- 脚本显示:证书剩余天数:已过期 (通过将 sslRenewalDays=90 修改为 sslRenewalDays=-90)
- 出现错误:handlev2гay : command not found
- acme.sh提示:cat: /root/.acme.sh/sedns.cn.se-cn.net/fullchain.cer: No such file or directory (sedns.cn.se-cn.net为域名)
- sing-box启动失败:tls: failed to find any PEM data in certificate input
- 证书文件为空但私钥文件正常
---> sing-box关闭成功
sing-box启动失败
请手动执行【 /etc/v2гay -agent/sing-box/sing-box merge config.json -C /etc/v2гay -agent/sing-box/conf/config/ -D /etc/v2гay -agent/sing-box/conf/ 】,查看错误日志
如上面命令没有错误,请手动执行【 /etc/v2гay -agent/sing-box/sing-box run -c /etc/v2гay -agent/sing-box/conf/config.json 】,查看错误日志
根本原因:
- acme.sh默认CA从Let's Encrypt切换到ZeroSSL,需要邮箱注册
- 证书文件在更新过程中被清空,但私钥保留
- 八合一脚本的证书更新逻辑存在bug (存疑)
解决步骤:
第一步:停止相关服务
systemctl stop nginx
systemctl stop sing-box
第二步:强制使用Let's Encrypt重新申请证书
/root/.acme.sh/acme.sh --force --issue -d 你的域名 --standalone --keylength ec-256 --server letsencrypt
第三步:安装证书到指定位置
/root/.acme.sh/acme.sh --install-cert -d 你的域名 --ecc
--key-file /etc/v2гay -agent/tls/你的域名.key
--fullchain-file /etc/v2гay -agent/tls/你的域名.crt
第四步:验证证书文件
cat /etc/v2гay -agent/tls/你的域名.crt
第五步:测试sing-box配置
/etc/v2гay -agent/sing-box/sing-box run -c /etc/v2гay -agent/sing-box/conf/config.json
第六步:启动服务
systemctl start sing-box
systemctl start nginx
关键技术点:
- 必须添加 --server letsencrypt 参数,否则默认使用ZeroSSL
- --force 参数强制重新申请,忽略现有证书
- --standalone 模式需要80端口空闲
- --keylength ec-256 使用ECC证书,体积更小
预防措施:
- 定期备份 /root/.acme.sh/ 目录
- 设置acme.sh默认使用Let's Encrypt:
/root/.acme.sh/acme.sh --set-default-ca --server letsencrypt - 监控证书有效期,提前手动更新
常见问题:
Q: 如果域名解析有问题怎么办?
A: 检查DNS解析,或使用其他有效域名的证书
Q: 如果80端口被占用?
A: 先停止nginx和其他web服务,或使用DNS验证模式
Q: 证书申请频率限制?
A: Let's Encrypt有速率限制,一小时内同一域名最多5次失败
适用场景:
- mack-a v2гay -agent 八合一脚本
- Let's Encrypt证书过期或损坏
- acme.sh证书管理问题
- sing-box TLS配置错误
注意事项:
- 操作前确保域名解析正确
- 备份重要配置文件
- 在低峰期进行操作
- 完成后测试所有代理协议
浙公网安备 33010602011771号