
我正在使用 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
將使用來自兩個單獨文件的憑證。