介紹
Let’s Encrypt是一家證書授權機構(CA),提供了一種獲取和安裝免費的TLS/SSL證書的簡單方法,從而在Web服務器上啟用了加密的HTTPS。它通過提供一個名為Certbot的軟件客戶端來簡化這個過程,該客戶端試圖自動化大部分(如果不是全部)所需的步驟。目前,在Apache和Nginx上獲取和安裝證書的整個過程都是完全自動化的。
在本教程中,您將使用Certbot為Ubuntu 20.04上的Nginx獲取免費的SSL證書,並設置您的證書以自動更新。
本教程將使用單獨的Nginx服務器配置文件而不是默認文件。我們建議為每個域創建新的Nginx服務器塊文件,因為這有助於避免常見的錯誤並將默認文件保留為後備配置。
讓DigitalOcean擔心管理Nginx和Let’s Encrypt。 DigitalOcean應用平台將讓您在幾分鐘內直接從GitHub部署。應用平台還將為您處理SSL證書和路由。
先決條件
要遵循本教程,您需要:
-
通過遵循此 Ubuntu 20.04 的初始伺服器設定 教程來設置一個 Ubuntu 20.04 伺服器,其中包括一個啟用 sudo 的非 root 使用者和一個防火牆。
-
已註冊的域名。本教程將在整個過程中使用
example.com
。您可以從 Namecheap 購買域名,使用 Freenom 免費獲得一個,或者使用您選擇的域名註冊商。 -
為您的伺服器設置以下兩個 DNS 記錄。如果您使用的是 DigitalOcean,請參閱我們的 DNS 文檔 以獲取有關如何添加它們的詳細信息。
- 一個 A 記錄,將
example.com
指向您伺服器的公共 IP 地址。 - 一個 A 記錄,將
www.example.com
指向您伺服器的公共 IP 地址。
- 一個 A 記錄,將
-
通過以下方式安裝了Nginx:在Ubuntu 20.04上安裝Nginx。請確保您的域名有一個伺服器塊。本教程將以
/etc/nginx/sites-available/example.com
作為示例。
第1步 — 安裝Certbot
使用Let’s Encrypt獲取SSL證書的第一步是在您的伺服器上安裝Certbot軟體。
使用apt
安裝Certbot及其Nginx插件:
現在Certbot已準備就緒,但為了讓它自動為Nginx配置SSL,我們需要驗證一些Nginx的配置。
第二步 — 確認Nginx的配置
Certbot需要能夠找到您的Nginx配置中正確的server
區塊,以便能夠自動配置SSL。具體來說,它通過查找與您請求證書的域名匹配的server_name
指令來完成此操作。
如果您遵循了Nginx安裝教程中的伺服器區塊設置步驟,則應該在/etc/nginx/sites-available/example.com
中為您的域名設置了一個伺服器區塊,其中的server_name
指令已經適當設置。
為了檢查,使用nano
或您喜歡的文本編輯器打開您域名的配置文件:
找到現有的server_name
行。它應該看起來像這樣:
如果是這樣,請退出您的編輯器,然後繼續下一步。
如果沒有,請更新以匹配。然後保存文件,退出編輯器,並驗證配置編輯的語法:
如果出現錯誤,重新打開服務器塊文件,檢查是否有任何拼寫錯誤或缺失字符。一旦您的配置文件語法正確,重新加載Nginx以加載新的配置:
Certbot現在可以找到正確的 server
塊並自動更新它。
接下來,讓我們更新防火牆以允許HTTPS流量。
步驟3 — 允許防火牆通過HTTPS流量
如果您啟用了 ufw
防火牆,建議按照先決條件指南的建議進行調整以允許HTTPS流量。幸運的是,Nginx在安裝時會向 ufw
註冊一些配置文件。
您可以通過輸入以下命令查看當前設置:
它可能看起來像這樣,意味著僅允許對Web服務器的HTTP流量:
OutputStatus: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx HTTP ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx HTTP (v6) ALLOW Anywhere (v6)
為了額外允許HTTPS流量,請允許Nginx完整配置文件並刪除多餘的Nginx HTTP配置文件允許:
您的狀態現在應該是這樣的:
OutputStatus: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx Full ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx Full (v6) ALLOW Anywhere (v6)
接下來,讓我們運行Certbot並獲取我們的證書。
步驟 4 — 獲取 SSL 憑證
Certbot 通過插件提供了多種獲取 SSL 憑證的方式。Nginx 插件將負責在需要時重新配置 Nginx 並重新加載配置。要使用此插件,請輸入以下命令:
這將使用 --nginx
插件運行 certbot
,並使用 -d
來指定要為其獲取有效憑證的域名。
如果這是您第一次運行 certbot
,系統將提示您輸入電子郵件地址並同意服務條款。完成後,certbot
將與 Let’s Encrypt 服務器通信,然後運行一個挑戰來驗證您擁有正在請求憑證的域名。
如果成功,certbot
將詢問您希望如何配置 HTTPS 設置。
OutputPlease choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel):
選擇您的選項,然後按下 ENTER
。配置將被更新,Nginx 將重新加載以採用新設置。certbot
將以一條消息結束,告訴您該過程成功並且您的憑證存儲在哪裡:
OutputIMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/example.com/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/example.com/privkey.pem
Your cert will expire on 2020-08-18. To obtain a new or tweaked
version of this certificate in the future, simply run certbot again
with the "certonly" option. To non-interactively renew *all* of
your certificates, run "certbot renew"
- If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
您的证书已下载、安装并加载完毕。尝试使用 https://
重新加载您的网站,并注意您浏览器的安全指示器。它应该指示该网站已正确安全,通常会显示一个锁定图标。如果您使用 SSL Labs 服务器测试 来测试您的服务器,您会获得一个 A 等级。
让我们最后测试一下更新过程。
步骤 5 — 验证 Certbot 自动续订
Let’s Encrypt 的证书只有效期为九十天。这是为了鼓励用户自动化其证书续订过程。我们安装的 certbot
软件包会通过添加一个 systemd 计时器来为我们处理这个过程,该计时器每天运行两次,并自动续订任何剩余有效期在三十天以内的证书。
您可以使用 systemctl
查询计时器的状态:
Output● certbot.timer - Run certbot twice daily
Loaded: loaded (/lib/systemd/system/certbot.timer; enabled; vendor preset: enabled)
Active: active (waiting) since Mon 2020-05-04 20:04:36 UTC; 2 weeks 1 days ago
Trigger: Thu 2020-05-21 05:22:32 UTC; 9h left
Triggers: ● certbot.service
要测试续订过程,您可以使用 certbot
进行干预运行:
如果您看不到任何错误,那么一切准备就绪。必要时,Certbot 将更新您的证书并重新加载 Nginx 以应用更改。如果自动续订过程失败,Let’s Encrypt 将向您指定的电子邮件地址发送一条消息,提醒您证书即将到期。
結論
在這個教程中,您安裝了 Let’s Encrypt 客戶端 certbot
,為您的域名下載了 SSL 憑證,配置了 Nginx 以使用這些憑證,並設置了自動憑證更新。如果您對使用 Certbot 有進一步的問題,官方文檔是一個很好的起點。