介绍
通配符证书是一种 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
。我们可以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
插件首先列出,还有默认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 令牌,所以它看起来像这样:
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/
. 您应该会看到类似于以下内容的输出:
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 自动更新证书时正常重新启动应用程序的更多信息,请查看我们教程的第 3 步和第 4 步如何使用 Certbot 独立模式检索让我们在 Ubuntu 上加密 SSL 证书18.04。