我希望將 Let's Encrypt 用於多個網域和子網域以及我的公司。我們的目標是使用短期的特定證書,而不是購買安裝在每台電腦上的長期通配符證書。這是為了防止一台機器受到損害時我們的暴露。
不幸的是,有些伺服器不能有任何服務中斷(又稱:沒有 HTTP acme 挑戰的能力)。所以最後的選擇是 DNS 挑戰。這需要我們的 DNS 提供者(在本例中為 Cloudflare)的 API 令牌。
但是,如果我將全域 API 令牌放在電腦上並且它受到損害,攻擊者就可以完全存取我們整個網域的 DNS。這正是我想透過不使用通配符憑證來緩解的問題。
Cloudflare 允許您建立特權較低的令牌,但它們不會比每個根級別域更細化。同樣,與通配符證書本質上相同的存取/關注。
有人想出解決這個問題的方法嗎?
答案1
我過去針對此要求採取的方法,以及我所採用的方法相信受到 Let's Encrypt 文件的祝福,是將_acme-challenge
您希望驗證的名稱的子網域 CNAME 為一個或多個其他區域中的名稱,這些區域具有不同的存取控製配置。
例如,如果您希望允許某些服務僅為 產生證書bobservice.example.com
,您可以為其他網域(例如 )建立單獨的區域,bobservice.example
然後 CNAME_acme-challenge.bobservice.com
到_acme-challenge.bobservice.example
。然後,質詢令牌將被放置在 上的 TXT 記錄中_acme-challenge.bobservice.example
,LE 位於 CNAME 後面,並且名稱將得到驗證。
當然,另一種選擇是完全放棄使用 Cloudflare,因為他們的服務缺乏有用的功能,例如有限範圍的憑證,而且還有他們向網路渣滓提供服務的微小問題。
答案2
不幸的是,有些伺服器不能有任何服務中斷(又稱:沒有 HTTP acme 挑戰的能力)。所以最後的選擇是 DNS 挑戰。
對於您的場景,還有另一種選擇,網站根目錄插件。這允許您告訴 Let's Encrypt 用戶端伺服器 Web 根目錄的路徑,它會將 HTTP 質詢檔案放在那裡。這種方法根本不會幹擾您的網路伺服器,並且不會導致停機。
答案3
我的解決方案是建立位於內部網路上的服務,該服務完全鎖定,並持有全域 API 金鑰。本服務將使用此金鑰為各個子網域建立/續訂憑證。依賴子網域憑證的伺服器將擁有一個每個網域的令牌,它們可以針對此內部服務頒發以檢索新的或更新的憑證。