如何使用 Certbot 创建 Let’s Encrypt 通配符证书

介绍

通配符证书是一种 SSL 证书,可以使用单个证书保护任意数量的子域。在需要支持多个子域但不想单独配置它们的情况下,您可能需要通配符证书。

Let’s Encrypt是一个 SSL 证书颁发机构,它使用自动化 API 授予免费证书。在本教程中,您将按照以下步骤创建 Let’s Encrypt 通配符证书:

  1. 确保您的 DNS 设置正确
  2. 安装完成基于 DNS 的挑战所需的 Certbot 插件
  3. 授权 Certbot 访问您的 DNS 提供商
  4. 获取您的证书

此信息旨在对任何 Linux 发行版和任何服务器软件有用,但您可能需要用进一步的文档来填补一些空白,我们将随时链接到这些文档。

先决条件

本教程假设您已经拥有以下内容:

让我们从设置和测试我们的 DNS 记录开始。

步骤 1 — 设置通配符 DNS

在我们获取通配符 SSL 证书之前,我们应该确保我们的服务器正在响应多个子域上的请求。这通常通过设置通配符 DNS 记录来完成,它看起来类似于:

*.example.com.   3600  IN  A  203.0.113.1

*通配符被视为一个独立于任何主机名。此示例 DNS 记录将匹配one.example.com, 和two.example.com它不会匹配裸的,example.com也不会匹配,因为通配符只会扩展到一个主机名,而不是多级名称。one.two.example.com*

此外,通配符 DNS 记录只能有一个通配符,因此*.*.example.com是不允许的。

请参阅您的 DNS 提供商的文档以设置正确的 DNS 条目。在继续之前,您需要添加一个ACNAME通配符记录。

注意:如果您使用 DigitalOcean 来管理您的 DNS,请参阅我们产品文档中的如何创建、编辑和删除 DNS 记录以获取更多信息。

要测试您的通配符 DNS 是否按预期工作,请使用以下host命令查询一些主机名:

  • host one.example.com

请务必在上面替换您自己的域和主机名。另外,请记住,DNS 记录有时需要几分钟才能在系统中传播。如果您刚刚添加了 DNS 记录并出现错误,请等待几分钟,然后重试。

当您输入的主机名正确解析时,您将输出类似于以下内容:

Output
one.example.com has address 203.0.113.1

否则,您将看到NXDOMAIN错误:

Output
Host one.example.com not found: 3(NXDOMAIN)

一旦您确认多个子域正在解析您的服务器,您就可以继续下一步,您将配置 Certbot 以连接到您的 DNS 提供商。

步骤 2 — 安装正确的 Certbot DNS 插件

在颁发证书之前,Let’s Encrypt 会执行质询以验证您是否控制了您为其申请证书的主机。在通配符证书的情况下,我们需要证明我们控制整个域。我们通过响应基于 DNS 的挑战来做到这一点,其中 Certbot 通过在目标域中创建特殊的 DNS 记录来回答挑战。让我们加密的服务器然后在颁发证书之前验证此记录。

为了连接到您的 DNS 提供商,Certbot 需要一个插件。请参阅Certbot 的 DNS 插件列表以获取适合您的 DNS 提供商的插件的名称。

例如,DigitalOcean 提供程序被称为certbot-dns-digitalocean我们可以certbot-dns-digitalocean通过安装以下软件包在 Ubuntu 和 Debian 上安装该插件:

  • sudo apt install python3-certbot-dns-digitalocean

其他插件应遵循相同的命名格式。如果您使用不同的服务,请将您的提供商的名称交换到上面的命令中。

在 CentOS 和其他基于 RPM 的发行版上,安装命令可能是dnf

  • dnf install python3-certbot-dns-digitalocean

或者yum

  • yum install python3-certbot-dns-digitalocean

您可能还需要在这些发行版上安装其他包存储库才能访问 Certbot 插件包。

要验证插件是否正确安装,您可以要求 Certbot 列出其当前插件:

  • certbot plugins
Output
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * dns-digitalocean Description: Obtain certs using a DNS TXT record (if you are using DigitalOcean for DNS). Interfaces: IAuthenticator, IPlugin Entry point: dns-digitalocean = certbot_dns_digitalocean.dns_digitalocean:Authenticator * standalone Description: Spin up a temporary webserver Interfaces: IAuthenticator, IPlugin Entry point: standalone = certbot.plugins.standalone:Authenticator * webroot Description: Place files in webroot directory Interfaces: IAuthenticator, IPlugin Entry point: webroot = certbot.plugins.webroot:Authenticator - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

在上面的输出中,dns-digitalocean插件首先列出,还有默认standalonewebroot插件。

当您确认安装了正确的插件后,请继续执行下一步以对其进行配置。

步骤 3 — 配置 Certbot 插件

因为 Certbot 需要连接到您的 DNS 提供商并代表您创建 DNS 记录,所以您需要授予它这样做的权限。这涉及从您的 DNS 提供商获取 API 令牌或其他身份验证信息,并将其放入 Certbot 稍后将读取的安全凭证文件中。

由于每个提供商都有不同的身份验证过程,请参阅您的特定Certbot DNS 插件的文档,以获取有关您需要获取哪些令牌或密钥的更多信息。

对于本示例,我们将继续使用该dns-digitalocean插件,并将我们的凭据存储在文件中~/certbot-creds.ini

我们将使用nano文本编辑器创建此文件

  • nano ~/certbot-creds.ini

这将打开一个新的空白文本文件。您需要根据特定 DNS 提供商的说明添加您的信息。DigitalOcean 需要一个 API 令牌,所以它看起来像这样:

~/certbot-creds.ini
dns_digitalocean_token = 235dea9d8856f5b0df87af5edc7b4491a92745ef617073f3ed8820b5a10c80d2

请务必使用您自己的信息替换上面的示例令牌。

保存并关闭文件。如果您正在使用nano,请输入CTRL+O(对于“write o ut”),点击ENTER,然后CTRL+X退出。

创建文件后,您需要限制其权限,以免您的机密泄露给其他用户。以下chmod命令将仅授予您的用户读写访问权限:

  • chmod 600 ~/certbot-creds.ini

设置凭据文件后,您就可以实际请求证书了。

第 4 步 – 检索证书

此时,检索您的 Let’s Encrypt 通配符证书类似于“普通”非通配符证书。该流程的主要更改是指定基于 DNS 的质询,并指向我们的 DNS 凭据文件。此外,我们将使用带有-d标志的通配符域

  • sudo certbot certonly \
  • --dns-digitalocean \
  • --dns-digitalocean-credentials ~/certbot-creds.ini \
  • -d '*.example.com'

请注意,您不能使用--nginx--apache插件使用通配符证书自动配置这些服务器。我们certonly改为使用该命令,只下载证书。

运行上述命令时,如果这是您第一次运行 Certbot,您可能会看到一些问题需要回答。回答后,Cerbot 将执行质询,Let’s Encrypt 服务器将对其进行验证,您的新证书将被下载并保存到/etc/letsencrypt/. 您应该会看到类似于以下内容的输出:

Output
IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/example.com/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/example.com/privkey.pem Your cert will expire on 2021-09-27. To obtain a new or tweaked version of this certificate in the future, simply run certbot again. To non-interactively renew *all* of your certificates, run "certbot renew" - If you like Certbot, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le

您已成功生成通配符 SSL 证书!您的下一步是配置您的服务器应用程序以使用它。我们将在下一节中链接到一些可以帮助解决此问题的资源。

结论

在本教程中,您配置了 Certbot 并从 Let’s Encrypt 证书颁发机构下载了通配符 SSL 证书。您现在已准备好配置您的服务器软件以使用此证书来保护其连接。

有关下载了哪些证书文件以及如何在 Certbot 自动更新证书时正常重新启动应用程序的更多信息,请查看我们教程的第 3 步和第 4 步如何使用 Certbot 独立模式检索让我们在 Ubuntu 上加密 SSL 证书18.04

觉得文章有用?

点个广告表达一下你的爱意吧 !😁