介紹
Let’s Encrypt是一個開放且自動化的憑證授權中心,使用ACME(自動證書管理環境)協議向任何兼容的客戶端提供免費的TLS/SSL憑證。這些憑證可用於加密您的 Web 伺服器與用戶之間的通信。有許多客戶端可用,使用不同的程式語言編寫,並與流行的管理工具、服務和伺服器進行了許多集成。
最流行的ACME客戶端Certbot現在由電子前哨基金會開發。除了驗證域名擁有權和獲取憑證外,Certbot還可以自動配置Apache和Nginx Web 伺服器上的TLS/SSL。
本教程將簡要討論憑證授權中心以及Let’s Encrypt的工作原理,然後回顧一些流行的ACME客戶端。
什麼是憑證授權中心?
證書授權機構(CAs)是以密碼學方式簽署TLS/SSL證書以證明其真實性的實體。瀏覽器和操作系統具有一組信任的CA清單,用於驗證網站證書。
直到最近,大多數CA都是商業運營,對於其驗證和簽署服務收取費用。Let’s Encrypt通過完全自動化該過程並依靠贊助和捐款來資助必要的基礎設施,使此過程對用戶免費。
有關證書和不同類型的證書授權機構的更多信息,您可以閱讀《比較Let’s Encrypt、商業和私人證書授權機構以及自簽名SSL證書》。
接下來,我們將看一下Let’s Encrypt如何進行自動域驗證。
Let’s Encrypt的工作原理
Let’s Encrypt的ACME協議定義了客戶端如何與其服務器通信以請求證書、驗證域擁有權並下載證書。它目前正在成為官方IETF標準的過程中。
Let’s Encrypt 提供 域驗證 憑證,這意味著他們必須檢查證書請求來自實際控制該域名的人。他們通過向客戶發送一個唯一的令牌,然後進行網絡或 DNS 請求以檢索從該令牌派生的密鑰來實現此目的。
例如,使用基於 HTTP 的挑戰,客戶端將從唯一的令牌和帳戶令牌計算一個密鑰,然後將結果放入一個由 Web 伺服器提供的文件中。然後,Let’s Encrypt 伺服器將檢索位於 http://example.com/.well-known/acme-challenge/token
的文件。如果密鑰正確,則客戶端已證明可以控制 example.com
上的資源,伺服器將簽署並返回一個證書。
ACME 協議定義了多種挑戰,您的客戶端可以使用這些挑戰來證明對域的所有權。HTTPS 挑戰與 HTTP 類似,只是客戶端將使用包含密鑰的自簽名憑證。DNS 挑戰尋找 DNS TXT 記錄中的密鑰。
Certbot Let’s Encrypt 客戶端
Certbot 是目前最流行的 Let’s Encrypt 客戶端。它包含在大多數主要的 Linux 發行版中,並且包含了對 Apache 和 Nginx 的方便的自動配置功能。安裝後,取得證書並更新 Apache 配置可以像這樣完成:
Certbot 會詢問一些問題,運行挑戰,下載憑證,更新您的 Apache 配置,並重新加載伺服器。然後,您應該能夠使用網絡瀏覽器訪問 https://www.example.com
。將會顯示綠色鎖定圖標,表明憑證有效且連接已加密。
因為 Let’s Encrypt 憑證僅有效期為九十天,設置自動更新流程非常重要。以下命令將在機器上更新所有憑證:
將上述命令放入 crontab 中,以便每天運行,憑證將在到期前三十天自動更新。如果憑證最初是使用 --apache
或 --nginx
選項創建的,Certbot 將在成功更新後重新加載伺服器。
如果您想了解更多關於 cron 和 crontab 的信息,請參考教程“如何使用 Cron 自動執行任務”。
其他客戶端
由於 ACME 協議是公開且有文檔記錄的,因此開發了許多替代客戶端。Let’s Encrypt 在其網站上維護了一個 ACME 客戶端列表。大多數其他客戶端沒有 Certbot 的自動網絡服務器配置功能,但它們具有其他可能適合您的功能。
- 有一個客戶端以幾乎所有的編程語言寫成,包括shell腳本、Go和Node.js。如果您在受限制的環境中創建證書並且不想包括Python和其他Certbot依賴,這可能很重要。
- 一些客戶端可以在沒有root權限的情況下運行。通常最好盡可能少地運行特權代碼。
- 許多客戶端可以通過使用您的DNS提供商的API自動創建適當的TXT記錄來自動執行基於DNS的挑戰。DNS挑戰使一些更棘手的用例成為可能,例如加密不公開訪問的Web服務器。
- 一些客戶端實際上已經集成到Web服務器、反向代理或負載均衡器中,這使得配置和部署變得更加簡單。
一些較受歡迎的客戶端包括:
- lego:lego是一個用Go編寫的單文件二進制安裝,支持許多DNS提供商,可使用DNS挑戰
- acme.sh:acme.sh是一個簡單的shell腳本,可以以非特權模式運行,並且還可以與30多個DNS提供商交互
- Caddy:Caddy是一個用Go編寫的完整Web服務器,內置支持Let’s Encrypt。
還有許多其他客戶端可用,許多其他服務器和服務正在通過集成Let’s Encrypt支持來自動化TLS/SSL設置。
結論
我們已經介紹了 Let’s Encrypt 的基本工作原理,並討論了一些可用的客戶端軟體。如果您想獲得有關如何在各種軟體上使用 Let’s Encrypt 的更詳細指示,以下教程是一個很好的起點:
Source:
https://www.digitalocean.com/community/tutorials/an-introduction-to-let-s-encrypt