對多個 API 帳號使用 certbot DNS 授權?

對多個 API 帳號使用 certbot DNS 授權?

我正在使用 EFF certbot ACME 用戶端在我的 Web 伺服器上產生單一 TLS 證書,該伺服器使用主題備用名稱 (SAN) 託管多個網域。到目前為止,所有網域都託管在特定的Digital Ocean 團隊中,並且我已為certbot 配置了Digital Ocean DNS 插件和為該團隊創建的個人存取令牌,以產生具有多個網域(包括通配符網域)的證書。

現在,客戶希望我也為他們希望保留完全控制權的網域提供服務,因此我們建立了一個新的 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

將使用來自兩個單獨文件的憑證。

相關內容