Certbot半手動操作

Certbot半手動操作

我想問是否可以使用 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 基礎設施存在(例如,您確實想要運行自己的伺服器軟體)並且配置良好的假設下運行。

有什麼幫助嗎?

[編輯] 我現在設法以交互方式調用它

 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 目錄和電子郵件(我希望將其作為未來續訂的參數)。所以現在的問題可能變成“我將來如何以非交互方式與 cron 重新運行它?”

答案1

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

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

我的自動續訂解決方案是對所有 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>

答案2

交互模式可能只運行一次。 Certbot 會記住憑證的儲存位置,並且始終位於工作目錄下。

沒有那麼糟。我的解決方案是/home/djechelon/srv/..../ssl/*用符號連結替換

簡而言之:

  1. 像往常一樣設定虛擬主機
  2. 使用指令為新網站取得新證書
  3. 重新載入 apache (我需要這個來設定虛擬主機)
  4. 更新時,僅使用certbot renew正確的工作目錄以非 root 身分執行

下發指令

 certbot certonly --webroot -d mta-sts.example.org --preferred-challenges http --work-dir [non-root-workdir --logs-dir [non-root-workdir] --config-dir [non-root-workdir]

更新命令(cron也許可以是 -ned )

 certbot renew --work-dir [non-root-workdir --logs-dir [non-root-workdir] --config-dir [non-root-workdir]

當然,在續訂時,應該至少安排一次 Apache 重新加載

相關內容