在当前的网络安全环境下,为网站启用 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
七、补充说明与注意事项
-
端口要求
- HTTP-01 验证方式需确保 80 端口对外开放
- HTTPS 服务需开放 443 端口
-
证书更新后的服务重载
Certbot 默认会尝试自动重载 Nginx / Apache。
如需自定义行为,可使用:certbot renew --deploy-hook "systemctl reload nginx"
结语
在 SSL 证书有效期已缩短至 30 天 的背景下,手动续签已经不具备可行性。
借助 Python + Certbot + Let’s Encrypt,我们可以将证书管理完全自动化,从根本上消除因证书过期导致的服务中断风险。
一次部署,长期受益,让 HTTPS 成为真正“无需维护”的基础设施。