目前,HTTPS已广泛运用于各种大小网站,提高了网站访问的安全性。传统方式部署SSL较为麻烦,需要手动购买证书或获取免费证书(通常有效期只有三个月到一年),还需要在快到期时手动更换证书,并且部署到网站上也比较麻烦。有没有方便、省心,还支持证书自动续期的SSL部署方式呢?这就是本文要介绍的实用程序——Certbot。
Certbot是什么?
Certbot是由电子前哨基金会(EFF)开发的用于自动获取由Let’s Encrypt颁发的免费证书的ACME客户端。它可以通过一行简单的命令自动执行证书颁发、安装和自动续期。
安装Certbot
官方推荐方式(我不太推荐)
官方推荐通过Snap来安装Certbot。对于Ubuntu,系统已自带snapd,直接执行以下命令即可安装:
$ sudo snap install --classic certbot
对于非Ubuntu系统,由于系统没有自带snapd,官方建议先安装snapd再执行上述命令安装Certbot,具体自行查询Snap官网。
我推荐的安装方式
我推荐使用系统自带的软件包管理器来安装(除了snap)。
简要介绍一下各Linux发行版使用软件包管理器安装软件的命令:
Debian/Ubuntu:sudo apt install <软件包名>
Fedora/CentOS/RHEL/Rocky Linux:sudo yum install <软件包名>
Arch/Manjaro:sudo pacman -S <软件包名>
先查询一下系统提供了哪些certbot相关软件包:
Debian/Ubuntu:apt search certbot
Fedora/CentOS/RHEL/Rocky Linux:yum search certbot
Arch/Manjaro:pacman -Ss certbot
随即会输出像这样的列表:
若您使用了Apache,就安装certbot和certbot-apache(在列表里找名字类似的就行);
若您使用了nginx,就安装certbot和certbot-nginx(在列表里找名字类似的就行);
若您使用了CloudFlare DNS,在列表里找到相应的带cloudflare的包并装上。
其他的扩展可根据自己的需求安装。
列表中后缀为-doc的软件包都是文档,无实际功能。
可以用Docker来部署Certbot吗?
自找麻烦。用Docker装好之后,要配置很多东西,远不如Snap或系统方式安装便捷。详情可以看这篇文章,以及这篇文章。
因为Docker天生的隔离特性,Docker版Certbot默认只有获取证书的功能,若要使其自动安装证书需要对Docker进行繁琐的权限配置操作,这就丧失了Certbot的便捷性。
使用Certbot
如果您的Apache或nginx是通过系统的软件包管理器安装的,那么Certbot使用起来非常简单,只需要执行这条命令:
$ sudo certbot
如果您使用了宝塔之类的管理面板,它们并没有在系统默认目录安装Apache/nginx,只需要指定一下Apache/nginx安装目录即可:(代码仅作举例,请自行查询相应的安装目录)
$ sudo certbot --nginx --nginx-server-root=/www/server/nginx/conf/
或
$ sudo certbot --apache --apache-server-root=/www/server/apache/conf/
按提示操作即可,首次使用会要求输入您的邮箱等信息。安装后,Certbot会注册一个系统服务,用于自动更新证书。
如何给用Docker部署的网站使用Certbot?
在用于反向代理的那个网页服务器(Apache或nginx)执行Certbot即可。
什么?你的反代服务器也是用Docker装的?那你要不试试在容器里面装一个Certbot……或者建议改成在宿主安装nginx用作反代好了。
同类软件
- Certbot-auto:Certbot的前辈,现已停止维护
- acme.sh:另一个获取Let’s Encrypt证书的脚本