如何使用Certbot创建Let'sEncrypt通配符证书

来自菜鸟教程
跳转至:导航、​搜索

介绍

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

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

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

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

先决条件

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

  • 已安装 Certbot 实用程序,版本 0.22.0 或更高版本。 如果您在安装 Certbot 时需要帮助,请访问我们的 Let's Encrypt 标签页,您可以在其中找到各种 Linux 发行版和服务器的安装指南。 下面列出了一些常见设置:

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

第 1 步 — 设置通配符 DNS

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

*.example.com.   3600  IN  A  203.0.113.1

* 通配符被视为任何主机名的替代字符。 此示例 DNS 记录将匹配 one.example.comtwo.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 记录并遇到错误,请等待几分钟,然后重试。

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

Outputone.example.com has address 203.0.113.1

否则,您将看到 NXDOMAIN 错误:

OutputHost 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。 我们可以通过安装以下软件包在 Ubuntu 和 Debian 上安装 certbot-dns-digitalocean 插件:

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(用于“写 out”),点击 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/。 您应该会看到类似于以下内容的输出:

OutputIMPORTANT 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 自动更新您的证书时优雅地重新启动您的应用程序的更多信息,请查看我们的教程 如何使用 Certbot 独立模式检索让我们加密 SSL 的步骤 3 和 4 Ubuntu 18.04 上的证书。