Certbot

Certbot 半手動操作

  • December 15, 2020

我想問是否可以將 Certbot 用於半自動化設置,其中底層基礎設施由控制,而不是由 Certbot 控制。

我了解 Certbot 將與 Let’s Encrypt 通信以發出質詢,這基本上是 Certbot 需要在我的 IP 地址或我的 DNS 中找到的令牌。

我完全控制了 Apache 伺服器,但它是一個非常定制的多主機設置(需要 SNI!),我不希望 Certbot 弄亂我的 Apache 配置,也不想以 root 身份執行。我們稍後會回到 sudoers。

我已經設置了託管空間mta-sts.example.org,因為我正在實施郵件傳輸代理的嚴格傳輸安全

我已經使用宏告訴 Apache,那/home/djechelon/srv/www/domains/mta-sts.example.org是我的工作區

  • htdocs:通過 HTTP 提供的內容
  • htdocs-secure:通過 HTTPS 提供的內容
  • 日誌:Apache VHost 日誌
  • ssl:這是mta-sts.example.org.{key,crt,ca_bundle?}存在的地方

我想告訴 Certbot 為我執行以下操作

  1. 獲得 LE 的挑戰
  2. 將挑戰寫入 下的適當文件/home/djechelon/..../htdocs,Apache 已準備好為它提供服務
  3. 要求 LE 驗證挑戰,因為 Apache準備好迎接挑戰
  4. 將證書寫入/home/djechelon/..../ssl/. 如果 LE 沒有提供 ca_bundle 沒問題,在我這裡是可選的
  5. 問題 Apache 重新載入(很快就會有 sudoers 設置)

我知道在這種情況下我需要使用該webroot外掛,但我很難找到所有選項的命令行幫助,包括文件和證書的儲存位置。

該文件假定該過程是互動式的,因此我必須手動複製質詢文件並要求 Certbot 聯繫 LE 進行域驗證。

我相信應該有一種簡單的方法來執行上面的簡單腳本,它在假設整個 IT 基礎設施存在(例如,您真的想執行自己的伺服器軟體)並且配置良好的情況下執行。

有什麼幫助嗎?

$$ Edit $$我現在設法以互動方式呼叫它

certbot certonly --webroot -d mta-sts.example.org --preferred-challenges http --work-dir /home/djechelon/etc/letsencrypt --logs-dir /home/djechelon/letsencrypt-logs --config-dir /home/djechelon/etc/letsencrypt

它要求我提供 webroot 目錄和電子郵件(我很樂意將其作為參數傳遞給未來的續訂)。所以現在的問題可能變成“我以後如何以非互動方式重新執行它?”

我不會將證書儲存在使用者的主目錄 ( /home/djechelon/..../ssl/) 下,因為如果使用者刪除證書文件,Apache 將無法啟動。我同意你的推理,如果 Certbot 不弄亂網路伺服器配置會更好,但目前看來你實際上是在導致你試圖避免的同樣的問題,因此我試圖警告你。

沒有理由將主目錄用於 HTTP-01 挑戰或日誌文件,也可以在 Apache 中使用靜態配置,在certonly模式下使用 Certbot,就像您已經做的那樣。

我的自動續訂解決方案是對所有 HTTP-01 挑戰使用相同的工作目錄(來自/etc/letsencrypt/renewal/example.com.conf):

# renew_before_expiry = 30 days
version = 0.31.0
archive_dir = /etc/letsencrypt/archive/example.com
cert = /etc/letsencrypt/live/example.com/cert.pem
privkey = /etc/letsencrypt/live/example.com/privkey.pem
chain = /etc/letsencrypt/live/example.com/chain.pem
fullchain = /etc/letsencrypt/live/example.com/fullchain.pem

# Options used in the renewal process
[renewalparams]
authenticator = webroot
server = https://acme-v02.api.letsencrypt.org/directory
account = 0123456789abcdef0123456789abcdef
rsa_key_size = 4096
[[webroot_map]]
example.com = /var/www/letsencrypt
www.example.com = /var/www/letsencrypt

這樣就可以添加一個全域Alias來處理所有的挑戰,但也可以只將它放在需要它的虛擬主機上:

<IfModule alias_module>
   Alias /.well-known/acme-challenge/ /var/www/letsencrypt/.well-known/acme-challenge/
</IfModule>

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