自動續訂 Web 域的安全證書
摘要:如果要使用 Ingress 資源自動配置和續訂 Let's Encrypt 證書,您可以輕鬆地在 Kubernetes 中部署 cert-manager。如果您已在使用 IBM CloudInternet Services 作爲 DNS 提供者,那麼可以通過證書管理器服務使用 Let's Encrypt 輕鬆地訂購證書。
目前,大多數應用程序都使用 HTTPS。爲確保用戶與您的應用程序建立安全通信,安全套接字層 (SSL) 或傳輸層安全性 (TLS) 證書起着不可或缺的作用。當使用其中任何一個證書時,在使用向證書註冊的域名的應用程序上啓用 HTTPS。然後,對與服務器之間傳輸的所有數據進行加密。此方法可確保任何人都無法輕易竊聽您的動態數據。
使用證書還可以防止應用程序用戶客戶端和您的服務器之間的通信遭遇中間人攻擊。最後,在 Web 應用程序中使用證書可確保沒有人能夠篡改交換的數據。在這個數字世界中,最重要的安全性最佳實踐之一就是確保您的 Web 應用程序使用 TLS 證書,這是一個經過更新的、更安全的 SSL 版本。
但是,現在這些證書將過期並且需要續訂。您是否正在尋找某種方法來簡化應用的 SSL 或 TLS 證書的續訂過程?本教程將介紹如何使用 Red Hat OpenShift on IBM Cloud 示例自動爲您的應用進行續訂。
前提條件
在開始之前,您需要 一個免費的 IBM Cloud 帳戶 。
預估時間
完成本教程大約需要 25 分鐘。
通過認證中心獲取 SSL 或 TLS 證書
您必須通過認證中心 (CA) 才能獲取 SSL 或 TLS 證書。認證中心充當受信任的第三方,用於驗證證書的請求者是實際所有者並且可以控制域。操作系統和瀏覽器具有標識爲受信任的 CA 列表。然後,URL 旁邊會顯示綠色鎖,指示 Web 應用程序正在使用 HTTPS。
-
使用 Let's Encrypt
Let's Encrypt 是受信任的認證中心之一,提供大多數瀏覽器都信任的經過域驗證的證書。它使用自動證書管理環境 (ACME) 協議進行驗證,將通過提問以驗證您是否實際控制自己的域名。此服務使用廣泛,因爲它可以輕鬆免費地獲得證書。
但是,使用此認證中心的缺點是頒發的證書僅可用 90 天。您必須完成獲取新證書的過程。由於證書過期,您可能會面臨應用程序中斷情況。手動請求證書可能很麻煩,特別是在您需要多個域的情況下。
- 使用 Certbot 客戶端。
通過 Let's Encrypt 獲取證書的一種簡單方法是運行 Certbot 客戶端。每次需要新證書時(例如,當證書過期時),都需要手動運行該客戶端。您可以通過編寫自己的代碼,每隔 90 天運行一次 Certbot 客戶端,自動執行此工作。如果您的 DNS 提供者支持 API,那麼就更容易,您無需通過 DNS 提供者的網站即可完成提問。可參閱 Let's Encrypt 和 Certbot 的入門文檔 。
使用 Kubernetes Ingress 實現自動化
如果您使用 Kubernetes 及其 Ingress 資源,則可能已在 Ingress 資源上使用 SSL 或 TLS 證書。如果要使用 Ingress 資源自動配置和續訂 Let's Encrypt 證書,您可以輕鬆地在 Kubernetes 中部署 cert-manager。Kubernetes 附加組件 cert-manager 可自動執行在 Ingress 資源中請求和使用證書的過程。
此開源軟件可完成您的要求:您無需對 DNS 提供者或應用程序進行任何手動干預。頒發證書後,證書應在您的環境中顯示爲 Kubernetes 密鑰。只要 cert-manager 正在運行,附加組件就會使其保持最新狀態。
使用 OpenShift 路由實現自動化
如果您使用 OpenShift 路由 ,請考慮使用 openshift-acme ,其運行方式類似於 cert-manager。它通過使用路由自動配置證書,這樣可以更輕鬆地在 OpenShift 路由上請求和附加證書。
由於 cert-manager 和 openshift-acme 都是開源項目,因此您可以查看源代碼並對其進行修改,以滿足自己的需求。您甚至還可以回饋到相應的上游。
使用證書管理器服務
IBM Cloud 包含證書管理器服務,可幫助您管理和部署 SSL 或 TLS 證書。該服務允許您存儲證書,並在證書即將過期時向您發送通知。它還允許您直接從 Let's Encrypt 訂購證書,這可以幫助您的應用程序防止因證書過期而中斷運行。
優點是您可以使用可用的 API 來自動完成證書的配置或續訂過程。如果您已在使用 IBM CloudInternet Services 作爲 DNS 提供者,那麼可以通過證書管理器服務使用 Let's Encrypt 輕鬆地訂購證書。對於其他 DNS 提供者,您需要設置自己的回調 URL 服務,以接收 Let's Encrypt 的驗證。
證書管理器實例使用您爲“需要證書域驗證”和“已發佈所訂購證書”等事件設置的回調 URL。
在 Red Hat OpenShift on IBM Cloud 中進行部署的示例
OpenShift 是可部署回調服務的一個示例。以下示例使用在 OpenShift 中部署應用程序的 Source-to-Image 策略。OpenShift 直接從 GitHub 存儲庫中提取,然後直接在平臺中進行構建和部署。
本部分中的樣本應用程序使用 Godaddy 作爲其 DNS 提供者,因爲可以免費使用其 API。當您已經廣泛使用 OpenShift 來部署應用程序時,在 OpenShift 中進行部署纔有意義。
- 要開始部署,就需要創建 IBM Cloud 證書管理器實例。如果您的 DNS 提供者不是 Godaddy,則需要修改代碼以使用 DNS 提供者 API(修改 DNS 記錄,例如,添加和刪除域中的 TXT 記錄)。
- 克隆 automate-cert-manager 存儲庫。從證書管理器儀表板中獲取您的證書管理器 CRN,使用您自己的值修改 openshift-auto-cert.env.template ,然後將其重命名爲 openshift-auto-cert.env 。您的 CRN 將進入 ALLOWED_CM 值,如下面的截屏所示:
示例 openshift-auto-cert.env :
GODADDY_KEY=keysample GODADDY_SECRET=secretsample GODADDY_DOMAIN=anthonyamanse.space CM_REGION=us-south ALLOWED_CM=crn:v1:bluemix:public:cloudcerts:us-south:a/123:123-456-567::
- 現在,您可以使用 OpenShift CLI 從命令行部署應用。在確保您已登錄的前提下運行以下命令:
oc new-app https://github.com/IBM/automate-cert-manager --env-file=openshift-auto-cert.env oc expose svc automate-cert-manager
- 要檢查構建和部署的狀態,可運行 oc get pods ,您應該會看到類似以下示例的結果:
$ oc get pods NAME READY STATUS RESTARTS AGE automate-cert-manager-1-build 0/1 Completed 0 4d automate-cert-manager-1-xs7gm 1/1 Running 0 4d
- 您必須對回調 URL 的公開路由啓用 HTTPS,才能使用證書管理器。編輯路由:
$ oc edit routes automate-cert-manager
- 在鍵 spec: 下添加 tls:, terminate: edge 行,如以下示例所示(縮進對於 yaml 文件很重要):
spec: tls: termination: edge
- 獲取路由:
oc get routes NAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARD automate-cert-manager automate-cert-manager-default.anthony-test-1-5290c8c8e5797924dc1ad5d1b85b37c0-0001.us-east.containers.appdomain.cloud automate-cert-manager 8080-tcp edge None
- 現在,您可以將路由放在證書管理器實例的回調 URL https://<your-route>/callback 中,如以下截屏所示:
- 嘗試通過證書管理器儀表板訂購證書。狀態應從 Order Pending 更改爲 Valid 。然後,您可以通過儀表板下載證書。您還可以使用證書管理器 API 來獲取更多自動化功能,以便訪問證書,並將其放置在任何所需使用位置(例如,在負載均衡器中)。下面的截屏給出了一個示例:
在 IBM Cloud Functions 中進行部署的示例
您可能更願意保持低成本並使用無服務器架構。因爲這樣您就無需擔心應用程序背後的基礎架構,從而可以節省時間。本部分中的這一示例使用IBM Cloud Functions 作爲無服務器平臺。
- 克隆您在上一部分使用的存儲庫,並修改 openwhisk-auto-cert.json.template 。
- 在 Cloud Functions 中進行部署:
$ ic fn action create callback-gd actions/callback-gd.js -P openwhisk-auto-cert.json --web true ok: created action callback-gd $ ic fn action get callback-gd -r ok: got action callback-gd https://us-south.functions.cloud.ibm.com/api/v1/web/QWERTY/default/callback-gd
- 使用來自 ic fn action get callback-gd -r 的 URL 作爲證書管理器實例的回調 URL。然後,您可以像上一部分那樣繼續訂購新證書。
結束語
由於當今的數據傳輸量十分龐大,在應用程序中使用 SSL 或 TLS 證書非常重要,尤其是在應用程序的用戶交換個人信息的情況下。因爲 HTTPS 所能提供的安全性,此安全通信會令您的用戶更加滿意。
此外,還要考慮其他認證中心頒發的證書將在 90 天后過期。與 Let's Encrypt 的域驗證 (DV) 相比,他們提供了其他驗證方法,如組織驗證 (OV) 和擴展驗證 (EV)。
對於您的用戶,確保其他人無法訪問其數據,並檢查他們使用的應用程序是否啓用了 HTTPS。如果要自動完成域的證書續訂過程,可從本教程中演示的方法開始。Let's Encrypt 可以快速頒發證書,而無需額外費用。爲您的證書設置良好的自動化可確保您的應用不會因證書過期而中斷運行。當您的 DNS 提供者擁有 API 時,您可以通過 Let's Encrypt 自動完成提問。
既然您已瞭解如何自動配置和續訂 TLS 證書,現在就可以在自己的 Web 應用程序上啓用 HTTPS,確保傳輸中的所有用戶數據都已加密。您學習了一些工具,通過這些工具可自動續訂 TLS 證書來避免運行中斷。在證書管理器之類工具的幫助下,您可以確保所有證書都安全存儲。
本文翻譯自 : Renew security certificates automatically for web domains (2019-08-01)