Let's Encrypt SSL 證書自動續期,無需 Cron —— OpenResty Edge
OpenResty Edge 端到端自動化 Let’s Encrypt SSL 證書的續期:在到期前約一個月自動排程下一次續期,將新證書推送到每一個閘道器叢集而無需 reload 或 restart,並在證書快過期(有效期少於等於 30 天)時在控制檯給出提醒——無需 cron 任務,無需 shell 指令碼。本文將完整演示從新增域名到在真實閘道器上驗證 HTTPS 的全流程。
為你的 Edge 應用新增域名
像往常一樣,讓我們進入 OpenResty Edge 的 Admin Web 控制檯。這是我們的控制檯的樣本部署。每個使用者都有自己的本地部署。
這一次我們繼續使用 test-edge.com 域名的樣本應用。
我們可以看到,它已經在 443 埠為 SSL 進行監聽。
進入這個應用。
這裡我們想要用子域名來做演示,所以需要先調整應用的設定。
讓我們為這個應用新增一個新的萬用字元域名。
儲存。
然後推送給我們的閘道器伺服器。因為 Let’s Encrypt 伺服器將會需要驗證我們的域名所有權。
釋出更改。
釋出!
簽發並自動續期 Let’s Encrypt SSL 證書
轉到 SSL 頁面。
我們可以看到,目前還沒有定義 SSL 證書。
讓我們新增一個新的證書。
我們支援各種不同的方式來頒發新的 SSL 證書。
如果你已經擁有其他 CA 簽發的證書,也可以直接上傳現有的 SSL 證書到 Edge,跳過整個簽發流程。
這裡就只演示 Let’s Encrypt 的方式。
將頂級域名 test-edge.com 新增到該證書中。
新增更多的子域名稱。
輸入我們的 api 子域。它可以是任何東西。
也可以新增更多子域名。
如果有很多域名,還可以使用批次輸入模式。
可以在這裡逐行輸入所需要的域名。
先退出批次輸入模式。
這裡的所有域名必須被解析到這個 OpenResty Edge 部署的閘道器伺服器上。
這個要求也在這裡提到了。
在終端上,我們可以使用 dig 命令來測試域名是否已經解析到我們的閘道器伺服器。
dig test-edge.com
可以看到有效的 DNS 答案。
也可以測試一下 api 子域。
dig api.test-edge.com
同樣也得到了有效的 DNS 答案。
Let’s Encrypt 伺服器需要透過這些域名訪問我們的閘道器伺服器。這是因為他們必須確保我們確實擁有這些域名。
對於萬用字元域名,你還必須使用 OpenResty Edge 作為域名的權威性 DNS 名稱伺服器。
同意 Lets’ Encrypt 訂閱者協議。
儲存。
就可以看到新的 Let’s Encrypt 證書了。
證書來源是 Let’s Encrypt。
它有兩個域名,正如預期的那樣。
我們可以在這裡檢視實時狀態。
透過點選這個狀態圖示來檢視詳細的進度。
還可以在這裡觀察有關 Let’s Encrypt 證書籤發過程的詳細日誌。
現在可以看到證書已經被簽發。
讓我們先退出這個狀態頁面。
可以在這一欄中檢視新證書的到期時間。
該證書將在 3 個月後過期。
而 OpenResty Edge 會在將來證書即將過期時自動更新。
我們可以看到預定的下次更新時間將在 2 個月後。也就是說,在過期前一個月。
現有的 Let’s Encrypt 證書也是可以編輯的。
我們在這裡不做任何改動。
或者也可以刪除這個證書。
我們現在不想刪除它。
但可以在不刪除的情況下禁用它。
然後,它也可以被重新啟用。
我們需要釋出一個新版本來推送我們的新證書,就像往常一樣。
點選這個按鈕。
釋出!
現在已經完成了!
現在,新的證書已經被推送到所有的閘道器叢集和伺服器上。
我們的配置更改不需要重新載入伺服器、重啟或二進位制升級伺服器程序。所以它是非常有效和可擴充套件的。
然後,OpenResty Edge 將在這些證書過期前再次自動更新來自 Let’s Encrypt 的證書。
如果由於某些原因,一些證書未能更新,當證書快過期(有效期少於等於 30 天)時,使用者會在控制檯看到類似這樣的提醒。
續期機制概覽: OpenResty Edge 會在管理介面中儲存證書的到期時間和下次續期時間,在到期前約一個月自動向 Let’s Encrypt 發起新的簽發請求,並將新證書推送到每一個閘道器叢集,全程無需 reload、restart 或二進位制升級。當證書快過期(有效期少於等於 30 天)時,控制檯會給出提醒,避免證書悄無聲息地過期。
在閘道器上驗證 HTTPS 和 Let’s Encrypt 證書
讓我們開啟一個新的瀏覽器標籤,透過 https 訪問 test-edge.com 網站。
它成功了!
同時測試 api 子域。
它也能工作!
我們也可以用一個閘道器叢集伺服器,在終端上測試我們的新證書。
在舊金山附近選擇一個閘道器伺服器。
複製它的公共 IP 地址,以 133 結尾。
在終端上,我們可以向這個閘道器伺服器傳送一個 HTTPS 請求。
curl -I --resolve 'test-edge.com:443:138.68.231.133' https://test-edge.com/
成功了!
我們也可以使用 -v 選項獲取更多細節資訊。
curl -I --resolve 'test-edge.com:443:138.68.231.133' https://test-edge.com/ -v
執行這個命令。
我們確實可以在這裡看到我們的伺服器證書。還可以看到該證書確實是由 Let’s Encrypt 頒發的。
瀏覽器和閘道器上的 HTTPS 都已經正常工作,接下來自然的一步是透過 Edge 頁面規則將所有明文 HTTP 請求重定向到 HTTPS,讓訪客永遠不會落到未加密的站點上。
常見問題
OpenResty Edge 甚麼時候續期 Let’s Encrypt 證書?
Edge 在證書到期日前約一個月自動排程下一次續期。由於 Let’s Encrypt 證書有效期為三個月,簽發到計劃續期之間大約會留出兩個月的時間,這一時間點可以在證書行的“下次更新”列中看到。
我需要 cron 任務或指令碼來續期證書嗎?
不需要。續期由 Edge 內部完成——無需配置 cron 任務,無需排程 certbot 二進位制檔案,也無需編寫 shell 鉤子。續期時間戳就儲存在管理控制檯中,緊挨著證書本身。如果你需要從 ZeroSSL、DigiCert、Google Trust Services 等其他 CA 簽發證書,Edge 更完整的 基於 ACME 協議的 SSL 證書自動化 採用同樣的免運維方式。
續期證書需要重新載入或重啟閘道器嗎?
不需要。當 Edge 續期一張 Let’s Encrypt 證書時,會透過 Edge 的配置同步層將更新推送到每一個閘道器叢集和伺服器,全程無需 reload、restart 或二進位制升級。文章末尾的 SSL 章節完整演示了這個“釋出”步驟。
自動續期失敗時會發生甚麼?
Edge 目前不會針對單次續期失敗傳送通知,但當證書快過期(有效期少於等於 30 天)時,控制檯會給出提醒,從而避免證書悄無聲息地過期。如果續期一直失敗——例如 Let’s Encrypt 無法再訪問其中某個域名——你可以在同一頁面上編輯證書、調整域名,或刪除後重新簽發。
關於 OpenResty Edge
OpenResty Edge 是一款專為微服務和分散式流量架構設計的全能型閘道器軟體,由我們自主研發。它集流量管理、私有 CDN 構建、API 閘道器、安全防護等功能於一體,幫助您輕鬆構建、管理和保護現代應用程式。OpenResty Edge 擁有業界領先的效能和可擴充套件性,能夠滿足高併發、高負載場景下的苛刻需求。它支援排程 K8s 等容器應用流量,並可管理海量域名,輕鬆滿足大型網站和複雜應用的需求。
如果你喜歡這個教程,請訂閱這個部落格網站和我們的 YouTube 頻道 或 B 站頻道。謝謝!
關於作者
章亦春是開源 OpenResty® 專案創始人兼 OpenResty Inc. 公司 CEO 和創始人。
章亦春(Github ID: agentzh),生於中國江蘇,現定居美國灣區。他是中國早期開源技術和文化的倡導者和領軍人物,曾供職於多家國際知名的高科技企業,如 Cloudflare、雅虎、阿里巴巴, 是 “邊緣計算“、”動態追蹤 “和 “機器程式設計 “的先驅,擁有超過 22 年的程式設計及 16 年的開源經驗。作為擁有超過 4000 萬全球域名使用者的開源專案的領導者。他基於其 OpenResty® 開源專案打造的高科技企業 OpenResty Inc. 位於美國矽谷中心。其主打的兩個產品 OpenResty XRay(利用動態追蹤技術的非侵入式的故障剖析和排除工具)和 OpenResty Edge(最適合微服務和分散式流量的全能型閘道器軟體),廣受全球眾多上市及大型企業青睞。在 OpenResty 以外,章亦春為多個開源專案貢獻了累計超過百萬行程式碼,其中包括,Linux 核心、Nginx、LuaJIT、GDB、SystemTap、LLVM、Perl 等,並編寫過 60 多個開源軟體庫。
關注我們
如果您喜歡本文,歡迎關注我們 OpenResty Inc. 公司的部落格網站 。也歡迎掃碼關注我們的微信公眾號:
翻譯
我們提供了英文版原文和中譯版(本文) 。我們也歡迎讀者提供其他語言的翻譯版本,只要是全文翻譯不帶省略,我們都將會考慮採用,非常感謝!


















































































