如何使用Certbot创建Let'sEncrypt通配符证书
介绍
通配符证书是一种 SSL 证书,可以使用单个证书保护任意数量的子域。 如果您需要支持多个子域但又不想单独配置它们,您可能需要通配符证书。
Let's Encrypt 是一个 SSL 证书颁发机构,它使用自动化 API 授予免费证书。 在本教程中,您将按照以下步骤创建 Let's Encrypt 通配符证书:
- 确保您的 DNS 设置正确
- 安装完成基于 DNS 的挑战所需的 Certbot 插件
- 授权 Certbot 访问您的 DNS 提供商
- 获取您的证书
此信息旨在对任何 Linux 发行版和任何服务器软件都有用,但您可能需要通过进一步的文档来填补一些空白,我们将在进行过程中链接到这些文档。
先决条件
本教程假设您已经拥有以下内容:
- 已安装 Certbot 实用程序,版本
0.22.0
或更高版本。 如果您在安装 Certbot 时需要帮助,请访问我们的 Let's Encrypt 标签页,您可以在其中找到各种 Linux 发行版和服务器的安装指南。 下面列出了一些常见设置:
- Certbot 支持的域名和 DNS 提供程序。 请参阅 Certbot 的 DNS 插件列表 以获取支持的提供商列表
让我们从设置和测试我们的 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 条目。 在继续之前,您需要添加 A
或 CNAME
通配符记录。
注意:如果您使用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
插件,以及默认的 standalone
和 webroot
插件。
当您确认安装了正确的插件后,继续下一步进行配置。
第 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 上的证书。