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 | certbot certonly --webroot -w /var/www/html -d www.example.com |
可以到/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 |