解决宝塔面板申请 Let's Encrypt 证书时报错的问题

新的域名终于备案通过了,但在服务器上安装宝塔面板并创建网站之后,却发现不知为何无法申请 Let's Encrypt 的免费 HTTPS 证书。只要我打开网站 SSL 配置中 Let's Encrypt 证书的申请界面,就会弹出 JSON 格式的报错信息。最后我手动用 Certbot 申请证书解决了这个问题,在此记录一下。

相关版本信息

云服务商:腾讯云

服务器系统:Ubuntu 20.04.3 LTS

宝塔面板:免费版 7.8.0

Nginx:1.20.1

Certbot:1.23.0

Snap:2.54

错误形式

只要我在宝塔面板中打开申请 Let's Encrypt 证书的界面,就会弹出 JSON 格式的报错信息:

{
  "DvT0S_yhh1Y": "https://community.letsencrypt.org/t/adding-random-entries-to-the-directory/33417",
  "keyChange": "https://acme-v02.api.letsencrypt.org/acme/key-change",
  "meta": {
    "caaIdentities": [
      "letsencrypt.org"
    ],
    "termsOfService": "https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf",
    "website": "https://letsencrypt.org"
  },
  "newAccount": "https://acme-v02.api.letsencrypt.org/acme/new-acct",
  "newNonce": "https://acme-v02.api.letsencrypt.org/acme/new-nonce",
  "newOrder": "https://acme-v02.api.letsencrypt.org/acme/new-order",
  "revokeCert": "https://acme-v02.api.letsencrypt.org/acme/revoke-cert"
}

我在宝塔面板官方论坛寻觅一番后,基本没有发现遇到类似错误的用户,唯一一位同病相怜的用户在发帖后官方也没给出回答。看起来只好手动申请 Let's Encrypt 证书了。

使用 Certbot 申请 Let's Encrypt 证书

安装 Certbot

我首先进入 Let's Encrypt 的网站,看到 《快速入门》中推荐使用 Certbot

我们建议大多数具有命令行访问权限的人使用 Certbot ACME 客户端。它可以在不下线您的服务器的前提下自动执行证书颁发和安装。对于不需要自动配置的用户,Certbot 还提供专家模式。它易于使用,适用于许多操作系统,并且具有出色的文档。访问 Certbot 官网 以获取针对于操作系统和 Web 服务器的订制文档。

看起来挺不错,于是我进入了 Certbot 网站的 《Certbot Instructions》页面,选择好我的服务器软件(Nginx)和操作系统(Ubuntu 20)后,网站引导我安装一个叫 Snap 的包管理器。而我在进入 Snap安装指导页面后,发现上面写着 Ubuntu 20.04 LTS 已经预装了这个叫 Snap 的包管理器。然而,我的系统里并没有预装它……不知道是腾讯云的系统镜像里删掉了还是网站标错了。

于是需要用 apt 手动安装一下,查找 snapd 并安装即可:

sudo apt install snapd -y

安装成功后,需要先更新一下 snap 的源:

sudo snap install core; sudo snap refresh core

之后,按照官网上的说法,需要先卸载清理掉系统里被 aptsnap 之外的包管理器安装的 certbot(如果之前被安装过),我之前没有安装过,就跳过清理这一步了。

然后,使用 snap 安装 certbot

sudo snap install --classic certbot

安装完成后,再设置符号链接,将 certbot 链接到/usr/bin 下方便调用:

sudo ln -s /snap/bin/certbot /usr/bin/certbot

使用 Certbot 申请证书供宝塔面板使用

Certbot 是个全自动的工具,按照官网说法,如果使用 sudo certbot --nginx 就可以自动完成申请证书到写入 Nginx 配置文件的一条龙服务。不过我的 Nginx 配置文件和宝塔面板强相关,我还是打算只申请证书,不让 Certbot 自动修改我的 Nginx 配置文件了,免得它改出什么宝塔面板不兼容的 bug 来。

如果直接安装官方教程里的步骤,运行 sudo certbot certonly --nginx 会报错,因为宝塔面板的 Nginx 并不安装在默认路径下。所以运行时要额外注明一下 Nginx 的路径:

sudo certbot certonly --nginx --nginx-server-root=/www/server/nginx/conf/

之后,Certbot 会自动检测到宝塔面板中用 Nginx 创建的网站与其绑定的域名,选择好按回车即可。证书申请完成后,在终端中会给出生成的证书(PEM 格式)与密钥(KEY)两个文件的路径,将内容复制出来即可。

当我准备将证书粘贴到宝塔面板的「其他证书」中时,却惊讶的发现在「其他证书」中,已经自动读取到了刚才 Certbot 生成好的证书(图 1),只需要直接按保存按钮,即可完成配置。

图 1 宝塔 SSL 配置其他证书

保存后的证书也会出现在宝塔面板的证书夹中(图 2)。

图 2 宝塔 SSL 配置证书夹

发表回复

您的电子邮箱地址不会被公开。