仅需申请一张多域名通配符证书,便可保护主域名以及下面的多个子域名。 使用 CloudFlare 作为 DNS provider,而提供 CloudFlare 的插件安装,开始阅读请先 确认 Certbot是否提供你需要的插件。

通配符域名证书申请与自动续费(Nginx,Debian 10)

之前曾经申请过主域名的证书,现在想要再添加通配符域名证书(*.yourinstance.com 格式的所有域名),或者第一次通过 Let’sEncrypt 与 Certbot 申请 SSL 证书,都可以参考这篇记录;系统配置与我不同的话,在 Certbot 页面 上输入您的配置,注意不同系统的命令差异。

欢迎提出用语或逻辑错误。

Table of Contents

一. 安装 snap

  1. debian 可以直接用 apt install 下载软件包。非 root 用户要加上 sudo;如果您正在使用 root 用户,则不需要添加 sudo

    sudo apt update
    sudo apt install snapd
    
  2. 关闭 SSH 或退出登录,并再次登录,确保 snap 路径正常更新,之后安装 core 来得到最新版本的 snapd

    sudo snap install core
    sudo snap refresh core
    

    测试看看:

    sudo snap install hello-world
    # 是否输出:hello-world 6.3 from Canonical✓ installed
    hello-world
    # 是否输出:Hello World!
    

    Debian 10 可能遇到的问题:

    There is a known issue affecting some Debian 10 users with snaps that depend on browser-sandbox, such as Microsoft Teams. The issues can be bypassed with the following command:

    sudo sysctl kernel unprivileged_userns_clone=1

二. 移除一切 Certbot 相关旧软件并安装新软件

  1. 根据你的系统任选其一将 certbot 删除:

    # 1
    sudo apt-get remove certbot
    # 2
    sudo dnf remove certbot
    # 3
    sudo yum remove certbot
    
  2. 通过 snap 安装 certbot

 sudo snap install --classic certbot
  1. 确保 certbot 命令可执行
    sudo ln -s /snap/bin/certbot /usr/bin/certbot
    
  2. 确保已安装的插件与 Certbot snap 具有相同容器
    sudo snap set certbot trust-plugin-with-root=ok
    
  3. 安装 DNS 插件,sudo snap install certbot-dns-<PLUGIN>,如果你使用 CloudFlare,直接执行:
    sudo snap install certbot-dns-cloudflare
    
    如果这里报错,再执行一遍步骤 4

三. 放置凭据

  1. 登录 CloudFlare,在主页面上找到 API keys;如果你的 cloudflare python module 版本大于等于 2.3.1,建议复制 restricted API Token,否则复制 Global API Key

  2. 设置 DNS 凭据

    sudo mkdir -p /root/.secrets/
    sudo touch /root/.secrets/cloudflare.ini
    # 添加/.secrets目录与cloudflare.ini文件
    
    sudo chmod 0700 /root/.secrets/
    sudo chmod 0400 /root/.secrets/cloudflare.ini
    # 指定权限
    
    nano /root/.secrets/cloudflare.ini
    # 编辑cloudflare.ini文件
    

    如果您使用 restricted API Token,按照下方格式编辑并变更 token 数值:

    # Cloudflare API token used by Certbot
    dns_cloudflare_api_token = 0123456789abcdef0123456789abcdef01234567
    

    如果您使用 Global API Key,按照下方格式编辑并变更 key 数值与 cloudflare 邮箱:

    # Cloudflare API credentials used by Certbot
    dns_cloudflare_email = [email protected]
    dns_cloudflare_api_key = 0123456789abcdef0123456789abcdef01234
    
  3. 申请证书

    certbot certonly \
      --dns-cloudflare \
      --dns-cloudflare-credentials ~/.secrets/cloudflare.ini \
      -d example.com
      -d *.example.com
    

    记得将 example.com 替换为您的域名,之后若您第一次申请,可能会要求您进行 TXT 验证,按照指示在 cloudflare 上操作即可;除此之外,您还应完成主域名的 A 记录验证

    如果系统提示 Another instance of Certbot is already running,使用 ps -ef | grep certb 指令查看 ID,并杀死进程 kill ID_number

四. 测试自动延期是否设置成功

```
sudo certbot renew --dry-run
```

没有报错的话证书申请与自动续期就配置完成啦,之后如果需要用主域名或者任一子域名配置代理(比如 nginx),将配置文件里需要证书 pem 路径的地方替换为生成的证书配置文件对应的路径就好了。

参考链接:

  1. certbot wildcard certificates (该地址已更新)
  2. Welcome to certbot-dns-cloudflare’s documentation!
  3. Another instance of Certbot is already running
  4. How to Generate Let’s Encrypt SSL Wildcard using Certbot?