作者选择了新冠肺炎救济基金作为为捐款写作计划的一部分接受捐款

介绍

大多数让我们加密证书是使用HTTP验证颁发的,这允许在单个服务器上轻松安装证书。然而,HTTP验证并不总是适用于发布用于负载平衡网站的证书,也不能用于发布通配符证书。

DNS验证允许使用DNS记录验证证书颁发请求,而不是通过HTTP提供内容。这意味着可以同时为运行在负载平衡器后面的web服务器集群或无法通过internet直接访问的系统颁发证书。使用DNS验证也支持通配符证书。

acme dns certbot工具用于将certbot连接到第三方dns服务器,当您请求证书时,可以通过API自动设置证书验证记录。这样做的好处是,您不需要将Certbot直接与DNS提供商帐户集成,也不需要授予它对完整DNS配置的无限制访问权限,这对安全性有利。

委托的DNS区域用于将证书验证记录的查找重定向到第三方DNS服务,因此,一旦初始设置完成,您可以请求任意数量的证书,而无需执行任何手动验证。

acme dns certbot的另一个关键优点是,它可以用于为可能在负载平衡器后面运行的单个服务器颁发证书,或者以其他方式无法通过HTTP直接访问的服务器颁发证书。在这些情况下不能使用传统的HTTP证书验证,除非在每台服务器上设置验证文件。如果要为无法通过internet访问的服务器(如内部系统或登台环境)颁发证书,acme dns certbot工具也很有用。

在本教程中,您将使用acme dns certbot钩子,让certbot使用dns验证来颁发Let’s Encrypt证书。

先决条件

要完成本教程,您需要:

按照Ubuntu 18.04的初始服务器设置设置的Ubuntu 18.08服务器,包括一个sudo非root用户。

您可以获取TLS证书的域名,包括添加DNS记录的能力。在这个特定示例中,我们将使用your-domainsubdomain.your-domain,以及*.your-domain作为通配符证书。但是,如果需要,可以针对其他域、子域或通配符进行调整。

准备好后,以非root用户身份登录服务器开始。

步骤1-安装Certbot

在这一步中,您将安装Certbot,这是一个用于颁发和管理Let’s Encrypt证书的程序。

Certbot在官方的Ubuntu Apt存储库中可用,但是,建议使用Certbot开发人员维护的存储库,因为它总是拥有最新版本的软件。

首先添加Certbot存储库:

sudo apt-add-repository ppa:certbot/certbot

您需要按ENTER接受提示并将新存储库添加到系统中。

接下来,安装Certbot软件包:

sudo apt install certbot

安装完成后,您可以检查Certbot是否已成功安装:

certbot --version

这将输出类似以下内容:

Outputcertbot 0.31.0

在此步骤中,您安装了Certbot。接下来,您将下载并安装acme dns certbot挂钩。

步骤2-安装acme dns certbot

现在已经安装了基本Certbot程序,您可以下载并安装acme dns Certbot,这将允许Certbot在dns验证模式下运行。

首先下载脚本副本:

wget https://github.com/joohoi/acme-dns-certbot-joohoi/raw/master/acme-dns-auth.py

下载完成后,将脚本标记为可执行:

chmod +x acme-dns-auth.py

然后,使用您最喜欢的文本编辑器编辑文件,并调整第一行,以强制其使用Python 3:

nano acme-dns-auth.py

在第一行末尾添加3:

acme-dns-certbot.py

#!/usr/bin/env python3
. . .

这是必需的,以确保脚本使用受支持的最新版本的Python 3,而不是传统的Python版本2。

完成后,保存并关闭文件。

最后,将脚本移动到Certbot让我们加密目录,以便Certbot可以加载它:

sudo mv acme-dns-auth.py /etc/letsencrypt/

在这一步中,您下载并安装了acme dns certbot挂钩。接下来,您可以开始安装过程并努力颁发第一个证书。

步骤3-设置acme dns certbot

为了开始使用acme dns certbot,您需要完成初始设置过程并颁发至少一个证书。

首先,运行Certbot以强制其使用DNS验证颁发证书。这将运行acme dns certbot脚本并触发初始设置过程:

sudo certbot certonly --manual --manual-auth-hook /etc/letsencrypt/acme-dns-auth.py --preferred-challenges dns --debug-challenges -d \*.your-domain -d your-domain

您可以使用--manual参数禁用Certbot的所有自动集成功能。在这种情况下,您只是发出一个原始证书,而不是将其自动安装到服务上。

您可以通过--manual-auth-hook参数将Certbot配置为使用acme dns Certbot挂钩。您运行--preferred-challenges参数,以便Certbot将优先考虑DNS验证。

您还必须告诉Certbot在尝试验证证书之前暂停,您可以使用--debug-challenges参数执行此操作。这是为了允许您设置acme DNS certbot所需的DNSCNAME记录,这将在本步骤后面介绍。没有--debug-challenges参数,Certbot不会暂停,因此您没有时间进行所需的DNS更改。

请记住,使用-d个参数替换您希望使用的每个域名。如果要颁发通配符证书,请确保用反斜杠(\)转义星号(*)。

遵循标准Certbot步骤后,最终会出现类似以下消息的提示:

Output...
Output from acme-dns-auth.py:
Please add the following CNAME record to your main DNS zone:
_acme-challenge.your-domain CNAME a15ce5b2-f170-4c91-97bf-09a5764a88f6.auth.acme-dns.io.
Waiting for verification...
...

您需要将所需的DNS CNAME记录添加到域的DNS配置中。这将把_acme-challenge子域的控制权委托给ACME DNS服务,这将允许ACME DNS certbot设置所需的DNS记录以验证证书请求。

如果您使用DigitalOcean作为DNS提供商,您可以在控制面板中设置DNS记录:

DigitalOcean DNS控制面板的屏幕截图,显示ACME DNS的CNAME记录示例

建议将TTL(生存时间)设置为300秒左右,以帮助确保快速传播对记录的任何更改。

配置DNS记录后,返回Certbot并按ENTER验证证书请求并完成颁发过程。

这需要几秒钟,然后您将看到一条消息,确认证书已颁发:

Output...
Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/your-domain/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/your-domain/privkey.pem
...

您已首次运行acme dns certbot,设置了所需的dns记录,并成功颁发了证书。接下来,您将设置证书的自动续订。

步骤4-使用acme dns certbot

在最后一步中,您将使用acme dns certbot颁发更多证书并更新现有证书。

首先,现在您已经使用acme dns certbot成功颁发了至少一个证书,您可以继续为相同的dns名称颁发证书,而无需添加另一个dns CNAME记录。但是,如果您希望获取不同子域或全新域名的证书,系统将提示您添加另一条CNAME记录。

例如,您可以颁发另一个独立的通配符证书,而无需再次执行验证:

sudo certbot certonly --manual --manual-auth-hook /etc/letsencrypt/acme-dns-auth.py --preferred-challenges dns --debug-challenges -d \*.your-domain

但是,如果您试图为子域颁发证书,系统将提示您为子域添加CNAME记录:

sudo certbot certonly --manual --manual-auth-hook /etc/letsencrypt/acme-dns-auth.py --preferred-challenges dns --debug-challenges -d subdomain.your-domain

这将显示与步骤3中执行的初始设置类似的输出:

Output...
Please add the following CNAME record to your main DNS zone:
_acme-challenge.subdomain.your-domain CNAME 8450fb54-8e01-4bfe-961a-424befd05088.auth.acme-dns.io.
Waiting for verification...
...

既然您可以使用acme dns certbot颁发证书,那么也值得考虑续订过程。

一旦您的证书即将到期,Certbot可以自动为您续订:

sudo certbot renew

续订过程可以从头到尾运行,无需用户交互,并将记住您在初始设置期间指定的所有配置选项。

为了测试这是否有效,而不必等到接近到期日时,您可以触发试运行。这将模拟续订过程,而不会对配置进行任何实际更改。

您可以使用标准renew命令触发试运行,但使用--dry-run参数:

sudo certbot renew --dry-run

这将输出类似于以下内容的内容,这将确保续订过程正常运行:

Output...
Cert not due for renewal, but simulating renewal for dry run
Plugins selected: Authenticator manual, Installer None
Renewing an existing certificate
Performing the following challenges:
dns-01 challenge for your-domain
dns-01 challenge for your-domain
Waiting for verification...
Cleaning up challenges
...

在最后一步中,您颁发了另一个证书,然后在Certbot中测试了自动续订过程。

结论

在本文中,您使用acme dns Certbot设置Certbot,以便使用dns验证颁发证书。这就释放了使用通配符证书以及管理可能位于负载平衡器后面的大量不同web服务器的可能性。

确保密切关注acme dns certbot repository以获取对脚本的任何更新,因为始终建议运行受支持的最新版本。

如果您有兴趣了解有关acme dns certbot的更多信息,您可能希望查看acme dns项目的文档,该项目是acme dns certbot的服务器端元素:

  • GitHub上的acme dns

acme dns软件也可以自托管,如果您在高安全性或复杂环境中操作,这可能会非常有益。

或者,您可以通过查看官方RFC文件的相关部分深入了解ACME DNS验证的技术细节,该部分概述了该过程的工作原理:

  • RFC8555-第8.4节
Logo

更多推荐