自動證書管理環境(ACME)詳解
自動證書管理環境(ACME)協議可實現公鑰基礎設施(PKI)證書生命週期管理的自動化,減少人手操作與相關風險。ACME 透過 HTTPS 傳輸 JSON 格式訊息,簡化證書的簽發、續期和吊銷流程,為管理大規模證書體系的 IT 團隊保障安全高效的運維。
甚麼是 ACME 協議?
自動證書管理環境協議(ACME)是一類用於實現證書生命週期管理通訊自動化的協議,通訊雙方為證書頒發機構(CA)與企業的 Web 伺服器、郵件系統、用戶設備,以及其他所有使用公鑰基礎設施(PKI)數碼證書的場景。ACME 協議無許可費用,IT 團隊僅需極少時間即可完成證書管理自動化的配置與執行,因此正逐步成為企業安全體系中被廣泛採用的組件。
互聯網安全研究組(ISRG)最初為自身的證書服務設計了 ACME 協議,後續該協議由其專屬的 IETF 工作組正式制定為完整的互聯網標準,發布於RFC 8555。當前協議版本為 ACME v2 API,發布於 2018 年 3 月。(此前版本 ACME v1 發布於 2016 年 4 月,目前已被棄用。)
PKI 數碼證書簽發的核心基礎是:Sectigo 等證書頒發機構(CA)作為受信方,負責驗證證書申請者確實合法擁有與 PKI 數碼證書關聯的身份及域名。以往需要人機交互傳遞 CA 完成身份驗證、簽發證書所需信息,以及用戶部署已簽發證書的全流程,現在均可透過 ACME 協議實現自動化。除證書簽發流程外,該協議還可透過加密 HTTPS 通訊傳輸簡單的 JSON 格式訊息,支援證書吊銷、續期等其他證書生命週期管理場景。
自動化協議——優勢與適用場景
儘管公鑰基礎設施(PKI)提供的數碼身份是目前安全性最強、最易用的身份認證與加密解決方案,但對於工作繁忙的 IT 團隊而言,手動部署和管理證書耗時較長,還可能產生不必要的風險,這一問題始終存在。無論企業是為單台 Web 伺服器部署一張 SSL 證書,還是管理組織內所有聯網設備、用戶身份對應的數百萬張證書,證書簽發、配置、部署的端到端流程最長可能需要數小時。手動管理證書還會讓企業面臨極高風險:證書因被遺忘而過期、所有權歸屬出現斷層的問題,進而引發突發服務中斷或關鍵業務系統故障,同時帶來數據泄露與中間人攻擊(MITM).
由於人手管理 PKI 證書存在不少潛在風險,企業需要 ACME 這類自動化標準,無需逐張人手確認證書有效性,即可保障證書配置與部署的正確性。這種自動化能力不但有助降低風險,還能協助 IT 部門控制營運成本。
為何選擇 ACME 而非其他方案?
目前亦有其他證書自動化標準,例如基於安全傳輸的註冊(Enrollment over Secure Transport,EST)以及簡單證書註冊協議(SCEP),以及與 Microsoft Active Directory 等企業架構相關的解決方案。那麼,為何 ACME 會成為越來越多企業青睞的自動化標準?
核心原因在於大多數企業的證書需求具備高複雜度與大規模特性。企業依賴公鑰基礎設施(PKI)證書完成各類場景的身份認證與加密,覆蓋雲端及本地的 Web 伺服器、聯網設備、流動設備、用戶身份、電郵系統、網絡設備、IoT 設備、DevOps 環境等眾多對象。令這個龐大生態的管理難度進一步提升的是,企業通常運行在多套 IT 基礎設施之上,而非單一的集中式架構。
IT 團隊越來越多借助 ACME 應對規模化與複雜度帶來的挑戰,因為它具備以下優勢:
- 作為開放標準,提供完整的命令集與可靠的錯誤處理機制,方便企業和證書頒發機構(CA)雙方採用
- 面向負責部署、管理有效公鑰基礎設施(PKI)證書的 IT 團隊,以及遵循嚴格認證流程的受信任證書頒發機構(CA),提供業界領先的 TLS 及其他公鑰基礎設施(PKI)安全實務
- 由社區持續迭代優化並提供支援,不受任何單一廠商或組織控制
- 具備新增及支援備用證書頒發機構(CA)的靈活性
- 可免費使用,成本低廉
ACME 協議的運作原理是什麼?
ACME 協議包含兩個通信實體:ACME 客戶端與 ACME 伺服器。ACME 客戶端透過該協議發起證書頒發、吊銷等證書管理操作請求。客戶端運行在需要公鑰基礎設施(PKI)證書保護的用戶伺服器或設備上。ACME 伺服器運行在證書頒發機構(CA)一方,例如 Sectigo,負責響應客戶端請求,並在客戶端完成授權後執行對應的請求操作。兩者之間的通信基於安全 HTTPS 連接傳輸的 JSON 訊息實現。
點擊了解更多關於Sectigo ACME 集成的資訊。
該流程的另一核心環節是認證步驟,即 ACME 挑戰。只有通過挑戰,證書頒發機構(CA)才會頒發證書或完成請求。這套驗證流程的認證要求可確保證書僅頒發給受信任的用戶。目前 ACME 挑戰分為兩類:
HTTP 挑戰
當 ACME 伺服器收到 ACME 客戶端的請求後,證書頒發機構(CA)會向客戶端返回一個令牌,要求客戶端將其安裝在伺服器上。隨後客戶端會建立一個包含該令牌的檔案,並在檔案內容後追加設定階段生成的授權密鑰指紋。檔案結構為(令牌)|| '.' ||(授權密鑰指紋)。檔案安裝完成後,客戶端會通知證書頒發機構(CA),由 CA 獲取並驗證該檔案,驗證通過後即可完成請求。
DNS 挑戰
這類挑戰增加了一重驗證因素,要求 ACME 代理在對應域名 DNS 空間的 TXT 記錄中填入指定值。其認證流程與 HTTP 挑戰類似:證書頒發機構(CA)向客戶端發送令牌,客戶端追加授權密鑰指紋後生成並安裝挑戰檔案。當代理通知 CA 已完成挑戰準備後,CA 會發起 DNS 查詢以獲取對應的 TXT 記錄。
整個挑戰流程速度很快,兩種類型的挑戰通常都能在15秒內完成。但根據 RFC 8555 的要求,管理員應當在 ACME 客戶端發送任何請求前完成伺服器配置,因為當用戶側系統的資源仍在部署過程中時,ACME 伺服器的查詢失敗是很常見的情況。例如,DNS 或 HTTP 配置、防火牆規則需要一定時間才能在全網伺服器中同步生效,如果 CA 在同步完成前就發起查詢,就可能返回錯誤。只要客戶端持續嘗試,CA 側的 ACME 伺服器會將挑戰狀態標記為「進行中」,並每隔5到10秒重試一次查詢。因此建議用戶在配置過程中,確認伺服器側查詢能夠成功後再讓客戶端響應挑戰,因為在上傳檔案或 DNS 記錄後,到 CA 能夠成功獲取這些內容之間,可能存在短暫延遲。
如何配置客戶端
配置 ACME 客戶端時,用戶首先需要選定要使用的客戶端,再將其安裝到對應的域名/伺服器上以使用 ACME 協議。靈活性是 ACME 的一大優勢,幾乎所有企業可能用到的編程語言和環境都有對應的客戶端實現:
- Bash
- C/C++
- Clojure
- Docker
- Go
- HAProxy
- Java
- Microsoft Azure
- nginx
- Node.js
- OpenShift
- Perl
- PHP
- Python
- Ruby
- Rust
- Windows/IIS
與開源標準的情況一致,所有證書頒發機構(CA)均不提供專有客戶端。因此各機構可自由選用合適的證書頒發機構(CA),前提是該CA支援ACME。以下是主流ACME v2客戶端列表,可於GitHub上查閱:
- 由電子前哨基金會(EFF)開發、Sectigo贊助的Certbot
- ACMESharp
- acme-client
- GetSSL
- Posh-ACME
- Caddy
- Sewer
- nginx ACME
- node-acme-lambda
下一步是配置ACME客戶端,繼而將其安裝到需要部署公鑰基礎設施(PKI)證書的伺服器上。配置流程共有6個簡單步驟,僅需數分鐘即可完成:
- 客戶端提示使用者輸入需要管理的一個或多個網域。
- 從客戶端提供的支援ACME的證書頒發機構(CA)清單中,選擇目標CA。
- 選定CA後,客戶端會與該CA建立連線並生成私鑰對。
- CA會下發HTTP或DNS類型的ACME挑戰,用於驗證使用者身分。
- 除挑戰內容外,CA還會發送一個隨機生成的數值,稱為nonce。客戶端使用剛生成的私鑰對該數值進行簽名,以證明自身持有該密鑰對。
- 設定客戶端聯絡CA進行證書續期的頻率。
證書頒發機構(CA)驗證挑戰通過且簽名真實有效後,ACME 客戶端將被正式授權,代表已驗證的網域執行相關操作。
ACME 如何支援證書生命週期管理(CLM)?
借助常規證書管理流程,使用 ACME 協議完成公鑰基礎設施(PKI)證書的簽發、續期和吊銷操作十分簡便。客戶端僅需發送標準 PKI 證書管理訊息,並使用授權密鑰對為相關證書簽名即可。
若要簽發或續期證書:
- 客戶端會建立一個Certificate Signing Request (CSR),向證書頒發機構(CA)請求為已授權網域簽發包含指定公鑰的證書
- CSR 中包含由其攜帶公鑰對應私鑰生成的簽名
- 客戶端使用該網域的授權密鑰對整個 CSR 簽名,以便證書頒發機構(CA)驗證其授權狀態
- 證書頒發機構(CA)驗證兩處簽名,若均有效,則為已授權網域簽發對應 CSR 中公鑰的證書
- 證書頒發機構(CA)將證書下發給客戶端
透過 ACME 進行證書吊銷的通訊流程與簽發、續期類似。客戶端使用該網域的授權密鑰對吊銷請求簽名,證書頒發機構(CA)驗證請求具備授權後,會將吊銷資訊發布至標準吊銷渠道,這樣瀏覽器便不會接受已吊銷的證書。
ACME 支援哪些類型的 TLS/SSL 證書及其他 PKI 證書?
如前所述,只要證書頒發機構(CA)為對應類型的 PKI 證書支援 ACME,ACME 標準就可支援企業 Web 伺服器、郵件系統、使用者裝置及其他所有使用 PKI 場景下的 PKI 證書。例如,它支援採用不同驗證模式的 SSL 證書——網域驗證(DV)、組織驗證(OV)和擴展驗證(EV)證書——但需注意,在 ACME 提供的流程之外,可能還需要完成額外的驗證步驟。
由於 Sectigo 提供SSL/TLS 證書以及Code Signing, S/MIME和其他X.509 數碼證書均支援 ACME,企業還需要一種可大規模實現端到端生命週期自動化管理的方案。Sectigo Certificate Manager支援 ACME 協議,可實現全自動化的證書生命週期管理(CLM)。


