简介
通配符证书是一种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记录来回答这个挑战。然后,Let’s Encrypt的服务器在签发证书前验证该记录。
为了连接到你的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
(代表 “写出”),点击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步 如何在Ubuntu 18.04上使用Certbot独立模式来获取Let’s Encrypt SSL证书.