简介:本文详细讲解如何使用acme.sh工具实现SSL证书的自动化续期,帮助开发者解决证书频繁过期的问题,确保服务安全稳定运行。
近年来,主流证书颁发机构(CA)如Let’s Encrypt、DigiCert等,普遍将SSL/TLS证书的有效期缩短至90天。这一调整源于安全行业的最佳实践:缩短证书有效期可降低私钥泄露风险,并强制实施定期的证书轮换机制。然而,对于运维人员而言,这意味着每三个月就需要手动更新证书,否则将面临服务中断、浏览器警告等严重后果。
通过自动化工具(如acme.sh)实现证书续期,可彻底消除人为错误,确保证书始终有效。其核心价值在于:
acme.sh是一个开源的ACME协议客户端,专为自动化管理Let’s Encrypt等CA的证书设计。其特点包括:
curl https://get.acme.sh | sh
安装完成后,脚本会自动将~/.acme.sh/目录添加到PATH环境变量中,并创建每日自动更新的cron任务。
acme.sh --version
输出应显示版本号(如v2.9.0)。
假设需为example.com和www.example.com签发证书:
acme.sh --issue -d example.com -d www.example.com \--webroot /var/www/html/
--webroot:指定Web服务器根目录,acme.sh会在此目录下创建临时验证文件。~/.acme.sh/example.com/目录下。以阿里云DNS为例:
export Ali_Key="your-access-key-id"export Ali_Secret="your-access-key-secret"acme.sh --issue --dns dns_ali -d "*.example.com"
*.example.com)。
acme.sh --install-cert -d example.com \--cert-file /etc/nginx/ssl/example.com.crt \--key-file /etc/nginx/ssl/example.com.key \--fullchain-file /etc/nginx/ssl/example.com.fullchain.crt \--reloadcmd "systemctl reload nginx"
--reloadcmd:指定证书更新后重启Nginx的命令。
acme.sh --install-cert -d example.com \--cert-file /etc/apache2/ssl/example.com.crt \--key-file /etc/apache2/ssl/example.com.key \--fullchain-file /etc/apache2/ssl/example.com.fullchain.crt \--reloadcmd "systemctl reload apache2"
acme.sh默认会为每个证书创建独立的cron任务,在证书过期前30天自动触发续期。可通过以下命令查看:
crontab -l | grep acme.sh
若需修改续期触发时间(如提前15天),编辑cron任务:
acme.sh --cron --home ~/.acme.sh/ --days 15
acme.sh --renew -d example.com --force
--force:强制立即续期(仅用于测试)。为多个域名签发统一证书:
acme.sh --issue -d example.com -d api.example.com -d blog.example.com
备份证书和配置:
acme.sh --backup /path/to/backup/
恢复备份:
acme.sh --restore /path/to/backup/
--webroot路径,确保80端口开放。crontab -l。tail -f ~/.acme.sh/acme.sh.log。acme.sh --renew -d example.com。--ecc参数使用ECC证书,提升安全性。通过acme.sh实现SSL证书自动续期,可彻底解决90天有效期带来的运维负担。其核心步骤包括:安装工具、选择验证方式签发证书、部署到Web服务器、配置自动续期任务。对于企业用户,建议结合CI/CD流水线实现证书管理的全自动化,进一步提升安全性和效率。
附:acme.sh官方文档链接(https://github.com/acmesh-official/acme.sh),持续关注可获取最新功能更新。