上次更新時間:
Let’s Encrypt 和 ACME 協定的目標是讓設定 HTTPS 伺服器變得可能,並自動取得瀏覽器信任的憑證,而無需任何人工干預。這是透過在網頁伺服器上執行憑證管理代理程式來完成的。
為了瞭解這項技術的運作方式,我們來逐步說明如何使用支援 Let’s Encrypt 的憑證管理代理程式設定 https://example.com/
。
這個過程有兩個步驟。首先,代理程式會向 CA 證明網頁伺服器控制網域。然後,代理程式可以請求、更新和撤銷該網域的憑證。
網域驗證
Let’s Encrypt 使用公開金鑰識別伺服器管理員。代理程式軟體第一次與 Let’s Encrypt 互動時,它會產生新的金鑰組,並向 Let’s Encrypt CA 證明伺服器控制一個或多個網域。這類似於傳統 CA 建立帳戶並將網域新增至該帳戶的流程。
為了啟動流程,代理程式會詢問 Let’s Encrypt CA,它需要做些什麼才能證明它控制 example.com
。Let’s Encrypt CA 會查看正在請求的網域名稱,並發布一組或多組挑戰。這些是代理程式可以證明控制網域的不同方式。例如,CA 可能會讓代理程式選擇以下其中一種:
- 在
example.com
下佈建 DNS 記錄,或 - 在
http://example.com/
上以知名的 URI 佈建 HTTP 資源。
除了挑戰之外,Let’s Encrypt CA 還會提供一個 nonce,代理程式必須使用其私密金鑰組簽署該 nonce,以證明其控制該金鑰組。

代理程式軟體會完成其中一組提供的挑戰。假設它可以完成上述第二個任務:它會在 http://example.com
網站上的指定路徑建立一個檔案。代理程式也會使用其私密金鑰簽署提供的 nonce。一旦代理程式完成這些步驟,它就會通知 CA,它已準備好完成驗證。
然後,CA 的工作是從多個網路角度檢查挑戰是否已滿足。CA 會驗證 nonce 上的簽名,並嘗試從網頁伺服器下載檔案,並確保它具有預期的內容。

如果 nonce 上的簽名有效,且挑戰通過,則以公開金鑰識別的代理程式即獲授權可對 example.com
執行憑證管理。我們稱代理程式使用的金鑰組為 example.com
的「授權金鑰組」。
憑證發行和撤銷
一旦代理程式擁有授權金鑰組,請求、更新和撤銷憑證就很簡單了,只需傳送憑證管理訊息並使用授權金鑰組簽署即可。
為了取得網域的憑證,代理程式會建構 PKCS#10 憑證簽署請求,要求 Let’s Encrypt CA 為具有指定公開金鑰的 example.com
發行憑證。如同往常一樣,CSR 包括由 CSR 中公開金鑰對應的私密金鑰所做的簽名。代理程式還會使用 example.com
的授權金鑰簽署整個 CSR,以便 Let’s Encrypt CA 知道它已獲得授權。
當 Let’s Encrypt CA 收到請求時,它會驗證這兩個簽名。如果一切順利,它會針對 example.com
發行憑證,其中包含來自 CSR 的公開金鑰,並將其傳回給代理程式。CA 也會將憑證提交至許多公開憑證透明度 (CT) 記錄檔。請參閱此處以了解更多詳細資訊。

撤銷的運作方式類似。代理程式會使用 example.com
授權的金鑰組簽署撤銷請求,而 Let’s Encrypt CA 會驗證該請求是否已獲得授權。如果已獲得授權,它會將撤銷資訊發布到正常的撤銷管道 (即 OCSP),以便瀏覽器等依賴方可以知道他們不應接受已撤銷的憑證。
