开发环境 使用 Python 安装 Certbot 实现 Let's Encrypt SSL 证书自动续签
在当前的网络安全环境下,为网站启用 HTTPS 已经成为基本要求。主流浏览器会对未启用 SSL 的网站给出明显的安全警告,而近年来各大云服务商与免费 CA 机构提供的 SSL 证书有效期已进一步缩短至 30 天。如果运维人员忘记及时续签证书,极易导致 HTTPS 失效,进而引发业务中断。
为了解决这一问题,Let’s Encrypt 提供了完全自动化的免费证书颁发服务,而 Certbot 是其官方推荐的证书管理工具。本文将介绍一种基于 Python(pip)安装 Certbot 的方式,实现 SSL 证书的自动申请与自动续签,避免因证书过期带来的运维风险。
一、环境准备
本文示例环境如下:
-
操作系统:Linux(Debian / Ubuntu)
-
Python 版本:Python 3
-
Web 服务器:Nginx 或 Apache
-
域名:已正确解析至服务器公网 IP
二、安装 Python 与 pip
如果系统尚未安装 Python 3,可使用以下命令进行安装:
sudo apt update
sudo apt install python3 python3-pip -y
验证安装结果:
python3 --version
pip3 --version
三、使用 pip 安装 Certbot
通过 Python 的 pip 工具安装最新版 Certbot:
sudo pip3 install certbot
安装 Web 服务器插件
根据实际使用的 Web 服务器选择对应插件:
Nginx 环境:
sudo pip3 install certbot-nginx
Apache 环境:
sudo pip3 install certbot-apache
安装完成后,验证 Certbot 是否安装成功:
certbot --version
如提示命令不存在,可使用完整路径:
/usr/local/bin/certbot --version
四、申请 Let’s Encrypt SSL 证书
Nginx 示例
sudo certbot --nginx
Apache 示例
sudo certbot --apache
Certbot 将自动完成以下操作:
-
验证域名所有权
-
申请并安装 SSL 证书
-
自动修改 Web 服务器配置
-
启用 HTTPS 访问(可选自动跳转)
证书默认存放路径如下:
/etc/letsencrypt/live/你的域名/
五、配置证书自动续签(关键步骤)
由于 Let’s Encrypt 证书的有效期仅为 30 天,必须依赖自动化机制进行续签。 通过 pip 安装的 Certbot 不会自动创建系统定时任务,因此需要手动配置 cron。
1. 确认 certbot 可执行路径
which certbot
通常返回:
/usr/local/bin/certbot
2. 创建 cron 定时任务
编辑 root 用户的 crontab:
sudo crontab -e
在文件末尾添加以下内容:
0 12 * * * /usr/local/bin/certbot renew --quiet
该任务含义如下:
-
每天中午 12 点自动检查证书状态
-
当证书剩余有效期较短(接近过期)时自动续签
-
--quiet选项用于减少无关输出,仅在出现错误时记录日志
六、验证自动续签配置
在正式投入使用前,应通过模拟方式验证续签流程是否正常:
sudo certbot renew --dry-run
若看到如下提示,说明续签机制已配置成功:
Congratulations, all simulated renewals succeeded
七、补充说明与注意事项
-
通过 pip 安装的 Certbot 不会随系统包管理器自动升级,建议定期检查并执行
sudo pip3 install --upgrade certbot以保持最新版本。 -
若在虚拟环境中部署 Certbot,需确保 cron 定时任务调用的是虚拟环境内的 certbot 可执行文件,否则可能因缺少插件依赖而导致续签失败。
结语
在 SSL 证书有效期已缩短至 30 天 的背景下,手动续签已经不具备可行性。 借助 Python + Certbot + Let’s Encrypt,我们可以将证书管理完全自动化,从根本上消除因证书过期导致的服务中断风险。
一次部署,长期受益,让 HTTPS 成为真正“无需维护”的基础设施。