服务器中的安装宝塔面板,不知为何无法申请 Let's Encrypt 的免费 HTTPS 证书。只要我打开网站 SSL 配置中 Let's Encrypt 证书的申请界面,就会弹出 JSON 格式的报错信息。最后我手动用 Certbot
申请证书解决了这个问题,在此记录一下。
服务器系统:Ubuntu 20.04.3 LTS
宝塔面板:7.9.2
Nginx:1.20.1
宝塔自动申请 Let's Encrypt SSL 证书的错误提示
只要我在宝塔面板中打开申请 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 SSL 证书
安装 Certbot
进入 Let's Encrypt 的网站,看到 《快速入门》中推荐使用 Certbot
:
我们建议大多数具有命令行访问权限的人使用 Certbot ACME 客户端。它可以在不下线您的服务器的前提下自动执行证书颁发和安装。对于不需要自动配置的用户,Certbot 还提供专家模式。它易于使用,适用于许多操作系统,并且具有出色的文档。访问 Certbot 官网 以获取针对于操作系统和 Web 服务器的订制文档。
在网站引导安装一个叫 Snap
的包管理器,需要用 apt 手动安装一下,查找 snapd
并安装即可。之后使用snap安装certbot,并最终使用certbot来完成对证书的申请。
certbot-install.sh
# 查找 snapd 并安装,之后更新 snap 的源: sudo apt install snapd -y sudo snap install core; sudo snap refresh core # 使用 snap 安装 certbot sudo snap install --classic certbot # 设置符号链接,将 certbot 链接到/usr/bin 下方便调用: sudo ln -s /snap/bin/certbot /usr/bin/certbot # 生成后的证书会暂存在 /etc/letsencrypt/live/ 目录下,可以按需取用
使用 Certbot 申请证书供宝塔面板使用
Certbot
是个全自动的工具,按照官网说法,如果使用 sudo certbot --nginx
就可以自动完成申请证书到写入 Nginx 配置文件的一条龙服务。不过我的 Nginx 配置文件和宝塔面板强相关,我还是打算只申请证书,不让 Certbot
自动修改我的 Nginx 配置文件了,免得它改出什么宝塔面板不兼容的 bug 来。
如果直接安装官方教程里的步骤,运行 sudo certbot certonly --nginx
会报错,因为宝塔面板的 Nginx 并不安装在默认路径下。所以运行时要额外注明一下 Nginx 的路径,使用 --nginx-server-root=/www/server/nginx/conf/
。
之后,Certbot
会自动检测到宝塔面板中用 Nginx 创建的网站与其绑定的域名,选择好按回车即可。证书申请完成后,在终端中会给出生成的证书(PEM 格式)与密钥(KEY)两个文件的路径,将内容复制出来即可。
certbot-bt.sh
sudo certbot certonly --nginx --nginx-server-root=/www/server/nginx/conf/
使用证书
将证书和私钥粘贴到宝塔面板的「其他证书」中,按保存按钮,即可完成配置。
保存后的证书也会出现在宝塔面板的证书夹中。
小技巧:申请单证书同时包含多个域名的方法
Certbot 申请证书时,常常会有需要一个证书同时申请多个域名的情况,可以在选择域名的界面,同时输入多个域名的编号,编号之间使用英文","进行分隔,即可将多个域名申请到同一个证书中去,十分方便。