由 neevop 三月 8, 2025
什么是certbot
certbot 是一个开源的自动获取SSL证书的工具。自从免费证书有效期降至3个月,感觉每隔一段时间就会被阿里/腾讯等DNS服务证书服务到期的短信提醒硬控。特别恶心的是这些大厂提供的免费证书还限制每年50个,对于我这种喜欢折腾的站点的穷鬼用户来说,证书焦虑就这么水灵灵的出现了。
然而,当你接触到certbot
这个工具后,这个焦虑可以被完全治愈。只需要花几分钟了解一下部署的基础步骤,你就可以重获SSL证书自由。
说明:本文档仅限于个人实践记录,推荐你从官方文档里获取更加完整的介绍。
安装certbot
certbot官方推荐了docker/pip安装方案,我优先尝试了docker方案,由于我的nginx是直接安装在公网站点系统里的,在验证站点的时候,需要特殊的处理才可以实现。因此我放弃了这种方案,采用了pip
方案。安装步骤可以参考:certbot用户文档
以下是我的安装步骤,建议在根域名指向的站点进行如下安装和配置。因为在配置插件的过程中,工具需要验证域名归属。
# 如果系统下没有python3,请按需安装
apt install libaugeas0
# 创建一个python虚拟环境,专门用于安装certbot. 如果不是root用户,可能需要加sudo, 下同。
python3 -m venv /opt/certbot/
/opt/certbot/bin/pip install --upgrade pip
/opt/certbot/bin/pip install certbot certbot-nginx
ln -s /opt/certbot/bin/certbot /usr/bin/certbot
至此,已经初步完成了certbot
工具的安装,接下来配置nginx插件
certbot --nginx
# 完成配置后,会在你的系统下生成文件 fullchain.pem privkey.pem
ls /etc/letsencrypt/live/yoursite.com
获取并安装证书
完成配置后,即可通过命令生成子域名SSL证书,一般生成的证书有效期为3个月。
certbot certonly -d dev.yoursite.com -n --nginx
# 等待成功执行后,会在系统中生成对应的证书文件
ls /etc/letsencrypt/live/dev.yoursite.com/
# README cert.pem chain.pem fullchain.pem privkey.pem
文件中fullchain.pem
和privkey.pem
即nginx加密需要的证书文件,将它们配置到你的nginx配置文件中
server {
listen 443 ssl;
server_name dev.yoursite.com;
ssl_certificate /etc/letsencrypt/live/dev.yoursite.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/dev.yoursite.com/privkey.pem;
...
}
完成证书配置后,检查配置有效,即可生效使用了。
# 检查nginx配置是否正常
sudo nginx -t
sudo systemctl daemon-reload
sudo service nginx restart
# 完成nginx服务重启后,检查下服务状态是否正常
sudo service nginx status
更新
更新主要涉及certbot
工具本身和证书的更新。官方建议定期更新certbot
工具,毕竟涉及安全,定期更新是很有必要的。
/opt/certbot/bin/pip install --upgrade certbot certbot-nginx
更新证书可以利用工具官方提供的命令行certbot renew
,命令会自动检查当前托管的所有证书到期时间,然后进行必要更新,默认的更新时间是2个月。
$ certbot renew
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Python 3.8 support will be dropped in the next planned release of Certbot - please upgrade your Python version.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/xxx.yoursite.com.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Certificate not yet due for renewal
...
此处证书更新后,需要手动重启nginx
服务,应用证书。