
我想問是否可以使用 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 為我執行以下操作
- 獲得 LE 的挑戰
- 將挑戰寫入下面的適當文件中
/home/djechelon/..../htdocs
,Apache 已準備好為其提供服務 - 請 LE 驗證挑戰,因為 Apache是準備迎接挑戰
- 將證書寫入
/home/djechelon/..../ssl/
.如果 LE 不提供 ca_bundle 沒問題,在我這裡是可選的 - 發出 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/*
用符號連結替換
簡而言之:
- 像往常一樣設定虛擬主機
- 使用指令為新網站取得新證書
- 重新載入 apache (我需要這個來設定虛擬主機)
- 更新時,僅使用
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 重新加載