如何用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记录,却出现了错误,请等待几分钟后再试。

当你输入的主机名正确解析时,你会看到类似于下面的输出。

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 插件被列在第一位,同时还有默认的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 (代表 “写出”),点击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证书.

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享