Let's Encrypt证书自动续期配置方法详解
Let's Encrypt的免费SSL证书解决了大量中小网站的HTTPS问题,但它有个让人头疼的特点——有效期只有90天。要是每次都手动去续,那简直是给自己找事。好在certbot这个工具自带自动续期机制,配好之后基本上可以彻底不管。
安装certbot并签发证书
以Nginx环境为例,Ubuntu系统下直接用apt安装:
apt install certbot python3-certbot-nginx
装好后执行签发命令,certbot会自动读取Nginx配置文件,找到对应的域名并完成验证:
certbot --nginx -d example.com -d www.example.com
首次运行时会要求填写邮箱和同意服务条款。这个邮箱很重要,证书快过期时Let's Encrypt会发提醒邮件。签发成功后,certbot会自动修改Nginx配置,把443端口的SSL路径指向新证书。
配置自动续期定时任务
certbot安装完成后,系统里其实已经自动生成一个systemd定时器,名字叫certbot.timer。确认它的状态:
systemctl status certbot.timer
如果显示active,说明已经在跑了。这个定时器每天会执行一次续期检查,但certbot的机制是只在证书到期前30天才会真正执行续期操作,所以不会频繁请求Let's Encrypt的API。
如果你的系统没有自动生成定时任务,手动加一个cron也行:
0 3 * * * /usr/bin/certbot renew --quiet
每天凌晨三点执行检查。renew命令只处理快过期的证书,不会影响正常使用中的证书。
续期后重启Web服务器
这里有个容易踩的坑:certbot续期成功后,新证书文件替换了旧文件,但Nginx并不会自动加载。需要在续期钩子里加上reload命令。certbot提供了一个配置目录来放钩子脚本:
在/etc/letsencrypt/renewal-hooks/deploy/目录下创建一个脚本文件,比如叫reload-nginx.sh,内容就两行:
#!/bin/bash
systemctl reload nginx
记得给执行权限:chmod +x reload-nginx.sh
这样每次证书续期完成后,Nginx会自动重载配置,新证书立即生效。最后用certbot renew --dry-run跑一次模拟测试,确认整个续期流程没有问题。这个命令不会真的去签证书,只是验证续期逻辑是否正常。