Let’s Encrypt 是一个证书颁发机构(CA)。要从这个机构获取域名证书,需要在服务器上使用支持 ACME 协议 的软件客户端来获取。
Certbot是 Let’s Encrypt 推荐使用的软件客户端。当我们有了域名证书之后,就可以配置使用 HTTPS 来访问了。
在使用 Cerbot 之前,需要提前安装并配置好 Nginx。
安装snapd
执行下面命令安装snapd
sudo apt install snapd
移除已安装的 certbot
没有安装过可跳过此步骤。
如果之前有安装过 certbot,需要先手动移除一下,因为现在使用的是 snapd 方式来安装。
sudo apt-get remove certbot
安装 certbot
执行下面命令,安装 certbot
sudo snap install --classic certbot
准备 certbot 命令
sudo ln -s /snap/bin/certbot /usr/bin/certbot
运行 certbot
执行下面命令,按提示填入内容,certboot 将会自动更改 nginx 配置,并启用 https 访问。
我在此步骤失败了,因为我的Nginx不是正常通过包管理器安装的,解决办法也很简单,参考常见问题
sudo certbot --nginx
如果想手动更新 nginx 配置,运行下面命令
sudo certbot certonly --nginx
自动续订
Let’s Encrypt 证书只有90天的有效期,到期后,需要再次申请。
certbot 提供自动续订功能,使用系统的 cron 或 systemd 功能,在证书到期之前,自动续订证书。
使用下面命令,可测试自动续订功能是否正常。
sudo certbot renew --dry-run
常见问题
NoInstallationError()
出现这个问题的直接原因:certbot 在 /usr/bin 目录下找不到nginx执行文件
解决办法
在 /usr/bin 目录下创建nginx的软连接。我的nginx位置是 /usr/local/nginx/sbin/nginx
sudo ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx
使用下面命令找到 nginx 位置
sudo find / name nginx
如果在 /etc/nginx 目录下没有配置文件,也需要创建 nginx 的 conf 目录软链接至 /etc/nginx
sudo ln -s /usr/local/nginx/conf /etc/nginx