使用 certbot DNS 授权和多个 API 帐户?

使用 certbot DNS 授权和多个 API 帐户?

我正在使用 EFF certbot ACME 客户端在我的 Web 服务器上生成单个 TLS 证书,该服务器使用主题备用名称 (SAN) 托管多个域。到目前为止,所有域都托管在特定的 Digital Ocean 团队中,我已使用 Digital Ocean DNS 插件和为该团队创建的个人访问令牌配置了 certbot,以生成具有多个域(包括通配符域)的证书。

现在,客户希望我还为他们想要完全控制的域名提供服务,因此我们创建了一个新的 Digital Ocean 团队,并且我的 DO 个人访问令牌创建帐户已被授予访问权限。不幸的是,我还发现个人访问令牌是为一个团队创建的,不能与其他团队一起使用。

我查看了 certbot 文档,但找不到如何为同一个 SAN 证书的不同域配置不同的 DO 凭据——这可能吗?

如果不是——您建议采用哪些其他替代方案来实现这个用例?

答案1

这显然不受任何内置身份验证器插件的支持,但可以通过使用“手动挂钩”编写脚本来解决这个问题,然后为每个要验证的域选择生成验证令牌的最佳方法。

我编写了一个手动挂钩脚本,支持验证多个 Digital Ocean 团队/用户中的域,假设您每个团队/用户都有一个个人访问令牌。该脚本可在此处获取:https://gist.github.com/guss77/01f095623a1d2fd00869784554d3e1a5

要使用它,请确保您已doctl在某处安装了 Digital Ocean CLI 工具(并在脚本中对其进行配置),并在脚本中设置您的个人访问令牌(该脚本还需要dig一些我希望在各处都能找到的常见 POSIX shell 工具,尽管在 Linux 之外可能无法很好地工作)。

然后不要使用其中一个插件,而是--dns*使用:

--preferred-challenges=dns --manual \
--manual-auth-hook /path/to/certbot-hook.sh \
--manual-cleanup-hook /path/to/certbot-hook.sh

尝试进行身份验证时,certbot 将调用此脚本为每个要验证的域创建 DNS 记录 -doctl在使用每个个人访问令牌扫描可用域列表并选择要创建记录的正确“区域”后,脚本将使用该工具。

不过,我有时对这种方法有疑问,特别是在 DNS 传播时间方面 - certbot 支持 DNS 插件的自定义 DNS 传播等待超时,但不支持手动模式,否则也没有很好的方法来模仿它。

答案2

我相信您只需指定不同的配置文件即可做到这一点。

根据certbot-dns-digitalocean插件文档凭证在 ini 文件中提供:

--dns-digitalocean-credentials DigitalOcean 凭证 INI 文件。(必需)

ini 文件包含类似以下内容:

dns_digitalocean_token = 0000111122223333444455556666777788889999aaaabbbbccccddddeeeeffff

如果您要为不同的凭据创建不同的文件,则可以通过指定这些不同的文件使插件使用不同的凭据。

例如

certbot certonly \
  --dns-digitalocean \
  --dns-digitalocean-credentials ~/.secrets/certbot/digitalocean-foo.ini \
  -d domain1.example

certbot certonly \
  --dns-digitalocean \
  --dns-digitalocean-credentials ~/.secrets/certbot/digitalocean-bar.ini \
  -d domain2.example

将使用来自两个单独文件的凭证。

相关内容