HTTPS 解決方案
由於微信小程式要求後端 API 介面的合法域名必須是 HTTPS 協議,所以我們需要將之前上線的部落格應用域名升級為 HTTPS 協議,要實現應用的 HTTPS 化,需要在伺服器上安裝 SSL 證照,理論上我們自己也可以頒發 SSL 證照,但是自己頒發的證照瀏覽器不認可,需要權威結構認證的才行。常見的 SSL 證照由國際頂級 CA 機構授權頒發,比如下面這幾個:
雖然安全穩定有保障,但是它們都是收費的,而且價格不菲,對於小微企業或者個人開發者來說,難以承受,所以今天學院君要給大家介紹的是一個免費的解決方案 —— Let's Encrypt。
Let's Encrypt 是一個於 2015 年三季度推出的數字證照認證機構,旨在以自動化流程消除手動建立和安裝證照的複雜流程,並推廣使全球資訊網伺服器的加密連線(HTTPS)無所不在,為安全網站提供免費的 SSL/TLS 證照。
Let's Encrypt 由網際網路安全研究小組(縮寫ISRG)提供服務,主要贊助商包括電子前哨基金會、Mozilla 基金會、Akamai 以及思科,所以安全可靠性上沒什麼問題。
綜上,Let's Encrypt 是一個免費、簡單、自動化、安全可靠的 HTTPS 解決方案。下面我們來介紹如何在伺服器安裝 SSL 證照,並且在部落格應用訪問上生效。
安裝 SSL 證照
為網站安裝證照很簡單,我們以上線 Laravel 部落格應用的那臺阿里雲伺服器作為演示環境,該環境使用的 Web 伺服器是 Nginx,作業系統版本是 Ubuntu 18.04,我們將使用 Let's Encrypt 的客戶端 Certbot 來自動化獲取、部署和更新安全證照。首先訪問 https://certbot.eff.org/ 選擇自己的軟體環境:
這樣,在下面的「automated」Tab 頁中就可以看到對應系統的安裝使用指南了。接下來我們按照這個指南,登入到自己的伺服器上執行對應的安裝指令碼安裝 Certbot 客戶端:
sudo apt-get update
sudo apt-get install software-properties-common
sudo add-apt-repository universe
sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update
sudo apt-get install python-certbot-nginx
安裝過程中,該直接回車回車,該選Yes輸入Y回車。安裝完成後,執行如下命令:
sudo certbot --nginx
執行這個命令時,Certbot 會先讓你輸入郵箱和同意協議,同意之後會自動檢測 nginx.conf
下面的配置,把所有站點配置都列出來並讓你選擇哪個域名開啟 HTTPS(輸入列表編號,多個用空格分開):
輸入編號後回車,我這裡只有一個域名,輸入1
回車,Certbot 就會為你下載證照並更新對應的站點配置資訊了。然後,還會讓你選擇是否在透過 HTTP 協議訪問應用時強制重定向到 HTTPS,1
表示不重定向,2
表示重定向,我選擇了重定向:
這個時候再次開啟 /etc/nginx/sites-available/laravel-blog
站點配置,就可以看到 Certbot 為我們新增的額外配置資訊了:
執行 service nginx reload
重啟 Nginx,就可以透過 https://blog.laravelacademy.org
訪問部落格應用了:
是不是很簡單?全程都是 Certbot 自動幫我們完成的。這樣,我們就完成了將部落格應用從 HTTP 協議升級到 HTTPS。
友情提示:啟用 HTTPS 後,應用中之前配置或者寫死域名的地方都要改成 HTTPS 協議。
自動更新證照
由於 Let's Encrypt 預設的有效期是 90 天,所以如果你的應用需要在生產環境長期提供服務,還要在證照到期之後更新證照,我們可以透過 certbot renew
命令來更新證照,你可以透過如下命令來測試該命令是否生效:
sudo certbot renew --dry-run
如果在輸出中看到如下字樣,則表示生效:
當然,真實環境中透過手動維護是不現實的,我們可以藉助 Crontab 來編寫一個定時任務,每個月都強制更新一個這個證照,然後重啟 Nginx:
0 0 1 * * certbot renew
5 0 1 * * service nginx restart
學院君注:Crontab 透過
crontab -e
命令編輯,透過crontab -l
檢視。
這樣,就完成了 SSL 安全證照無人值守式更新了。
本作品採用《CC 協議》,轉載必須註明作者和本文連結