Lets-Encrypt

使用 certbot 和使用 DNS 質詢更新域

  • March 28, 2019

我使用獨立方法為多個域創建了多個 SSL 證書。我只對證書感興趣,沒有伺服器集成。

他們現在正在更新。所以,我跑了:

certbot -d example.com --manual --preferred-challenges dns certonly

並遵循每個域的說明(為每個域添加所需的 DNS 條目)。這樣,我不必停止伺服器並獲得我的新證​​書。

我對這一切的(模糊)理解是,目前沒有使用 DNS 質詢自動更新證書的方法。或者您可能無法為“手動”方法自動更新證書?

無論如何,我寫了這個腳本:

#!/bin/bash

for i in renewal/*;do
 n=${i:8:-5};
 echo $n;
 # echo "\n" | certbot --text --agree-tos -d $n --manual --preferred-challenges dns --expand --renew-by-default  --manual-public-ip-logging-ok certonly;
done

此時,renewal目錄中的所有域都具有:

驗證器 = 手動

和:

pref_challs = dns-01

問題:

  • 現在……當我執行“certbot renew”時,它會在不使用我的腳本的情況下自動更新所有這些嗎?
  • 如何開始使用 DNS 質詢實際創建新證書?

更新的答案(見下面的原始答案)

renew在我最初的回答中,我關注的是使用命令時不需要您提供的腳本這一事實。但是,我不確定該renew命令是否真的適用於這種情況。

正如評論中的 cdhowie 和 bobpaul 所說:certbot renew是一種非互動模式,它與 dns 挑戰結合使用 - 要求您通過--manual-auth-hook參數提供腳本。所述腳本必須能夠設置TXT記錄。您還可以通過參數提供另一個腳本進行清理--manual-cleanup-hook

如果您提供這些參數,整個過程將自動執行,無需任何互動。

如果您不提供這些參數,則 certbot 將失敗:

/opt/certbot # certbot renew --force-renewal
Saving debug log to /var/log/letsencrypt/letsencrypt.log

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/foobar.w9f.de.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Could not choose appropriate plugin: The manual plugin is not working; there may be problems with your existing configuration.
The error was: PluginError('An authentication script must be provided with --manual-auth-hook when using the manual plugin non-interactively.',)

如果要通過手動模式更新證書,則必須重新執行用於獲取證書的命令。在這種情況下,您的腳本是一個不錯的選擇,因為該命令不會查看目前的證書/配置,而是要求您通過參數或以互動模式certonly提供域名。-d


當我執行“certbot renew”時,它會在不使用我的腳本的情況下自動更新所有這些嗎?

TL;DR:是的,應該。

讓我們看一下certbot 的文件

從 0.10.0 版本開始,Certbot 支持更新操作來檢查所有已安裝的證書是否即將到期並嘗試更新它們。最簡單的形式就是

certbot 更新

到現在為止還挺好。

此命令嘗試更新任何先前獲得的在 30 天內到期的證書。

這應該回答你的問題。當心:我不知道如何certbot處理將證書移動到不同目錄的情況。

稍後在同一段中:

除非您指定其他外掛或選項,否則最初頒發證書時使用的相同外掛和選項將用於續訂嘗試。與 不同certonlyrenew作用於多個證書並始終考慮每個證書是否即將到期。

所以,是的;certbot應該在沒有腳本幫助的情況下更新所有證書。


我如何實際使用 DNS 質詢創建新證書?

您在文章開頭髮布的命令有什麼問題? certbot -d example.com --manual --preferred-challenges dns certonly將使用 dns 質詢獲取 example.com 的證書。

創建證書的步驟如下:

  • 執行certbot您發布的命令
  • 等待命令顯示 DNS TXT 記錄
  • 創建該 TXT 記錄
  • 繼續certbot命令
  • 獲取指定域的證書
  • 刪除 TXT 記錄(因為您只需要它來創建和更新一個新的)

如果你想自動化整個過程,你可能想看看像樂高這樣支持幾個DNS 提供商的工具。

引用自:https://serverfault.com/questions/879647