0%

Certbot自动续签SSL证书

https已经必不可少,经常部署vps手动申请部署证书很麻烦,证书会过期,需要定期更新,没这个精力,现在我们可以利用certbot自动申请ssl证书,非常方便。

certbot有很多种方式申请证书,具体可查看文档:https://certbot.eff.org/docs/,不同方式的用途不一样,如果只是静态网站,那么可以选择nginx插件部署,如果是科学上网,那么建议使用webroot更方便。

前置信息

系统:ubuntu 20.04

域名DNS解析到这台机器的IP

具体操作

不管是部署静态网站还是科学上网,都要安装nginx

1
sudo apt install -y nginx

安装certbot

1
sudo apt install -y certbot

nginx插件方式

安装插件

1
sudo apt install -y python3-certbot-nginx  # 官网写的是 python-certbot*,但是在ubuntu 20.04上已经更新为python3了

运行以下命令,按照提示输入正确信息即可

1
certbot --nginx

重启nginx

1
sudo systemctl restart nginx

还原操作

1
certbot --nginx rollback

可以访问https域名进行测试。

webroot方式

webroot方式依赖现成的静态服务(nginx),它需要在指定的目录下生成特殊的文件,用于验证。

1
2
3
certbot certonly --webroot -w /var/www/html -d www.example.com
# -d 指定申请的域名,可以写多个
# -w 指定静态服务的根目录,在nginx中默认是/var/www/html

可以到/etc/letsencrypt/live/中查看已经申请到的证书

两个证书key: privkey.pem,cert: fullchain.pem,可以用在nginx和科学上网,自行配置即可。

自动续签

certbot的更新证书命令,这个命令会自动判断是否需要更新,如果没有满足条件,会跳过更新。

1
certbot renew --cert-name xxx.xxx.com --post-hook "systemctl restart nginx && systemctl restart ..."

这个命令带有两个hook,可以做一些特殊的操作,比如重启nginx或者重启科学上网服务。

如果要做到自动续签,就要借助crontab,这个工具是linux用来运行定时任务的。

1
crontab -e # 选择vim编辑定时任务,一行一个定时任务。

它的格式

1
0 3 */7 * * certbot renew --cert-name xxx.xxx.com --post-hook "systemctl restart nginx && systemctl restart ..."

上面命令表示每隔7天凌晨3点执行证书更新操作,如果需要其他更新周期的话,可以查看crontab文档。

这样就能实现自动续签ssl证书,永久使用,除非letsencrypt完蛋。

撤销证书

1
certbot revoke --cert-path /etc/letsencrypt/live/CERTNAME/cert.pem