使用Let's Encrypt設定HTTPS(SSL/TLS)
1. 這堂課是關於什麼的,為什麼這麼重要
在現代世界,HTTPS 已經成為所有網站的標準。如果你希望用戶感覺安全,且避免 Google 在搜索排名中降低你網站的位置(沒錯,HTTPS 會影響 SEO),那麼你絕對需要設置 SSL/TLS。HTTPS 協議透過加密保護用戶與伺服器之間傳輸的數據,這樣可以防止惡意入侵者攔截數據。
在這堂課中,我們會一步步教你如何免費使用 Let's Encrypt 來為你的 Web 伺服器啟用 HTTPS。Let's Encrypt 是一家權威的證書機構(CA),提供免費的證書和安裝工具。我們還會學到如何自動續期證書,以避免證書過期帶來的麻煩。
HTTP vs HTTPS
HTTP (Hypertext Transfer Protocol) 是一種數據傳輸協議。它很適合用來刷貓咪 meme,但!如果有人接入你的 Wi-Fi 網絡(比如咖啡館裡),他們可以攔截你發送到伺服器的數據(很糟糕,你的密碼會變成“他們的密碼”)。
HTTPS (Hypertext Transfer Protocol Secure) 是 HTTP 加上加密的版本。通過 SSL/TLS (Secure Sockets Layer / Transport Layer Security),在用戶和伺服器之間傳輸的數據會得到保護。即使有人攔截到了數據“包”,他也無法看到裡面的內容。
2. 安裝Let's Encrypt以及Certbot
Certbot是一款由Let's Encrypt開發者提供的工具,幫助我們輕鬆獲取並設定SSL憑證給你的網路伺服器。它夠聰明,可以與Nginx或者Apache自動協作,幫我們處理所有繁瑣的事物。我們從安裝開始吧。
安裝Certbot
確保你的伺服器已更新:
sudo apt-get update
sudo apt-get upgrade
現在我們來安裝Certbot及其插件:
對於Nginx:
sudo apt-get install certbot python3-certbot-nginx
對於Apache:
sudo apt-get install certbot python3-certbot-apache
Certbot本身只是簡單的Python程式碼,由社群積極維護。它可以輕鬆整合到大多數伺服器中。
3. 使用 Certbot 獲取 SSL 證書
對於 Nginx
如果你使用 Nginx,Certbot 可以自動為你的網站設定 HTTPS。輸入以下指令:
sudo certbot --nginx
Certbot 會掃描你目前的虛擬主機 (server
區塊的設定)。它會問你要為哪個域名設定 HTTPS。確認你的域名透過 DNS 指向你的伺服器(例如,使用 A 記錄)。
範例輸出:
Which names would you like to activate HTTPS for?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: example.com
2: www.example.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
選擇你的域名 (例如, 1)。
Certbot 會自動設定 Nginx 的設定檔並進行檢查。完成後,你會看到類似以下的訊息:
Congratulations! Your certificate and chain have been saved ...
現在你的網站可以透過 HTTPS 訪問了。你可以打開 https://example.com 在瀏覽器中檢查。
對於 Apache
如果你使用 Apache,指令會稍微不同:
sudo certbot --apache
Certbot 也會掃描你的虛擬主機 (<VirtualHost>
區塊) 並提議為選定的域名設定 HTTPS。選擇你需要的域名,之後 Certbot 會為你完成所有設定。
完成後,你同樣會看到一個祝賀訊息,並可以透過 HTTPS 檢查你網站的可用性。
4. 自動更新證書
Let's Encrypt 的證書只有效 90 天,所以我們需要定期更新它們。Certbot 可以自動完成這個操作,但我們需要確認一切已正確配置。
檢查證書的有效期限
你可以檢查你的證書何時到期:
sudo certbot certificates
輸出會顯示你的域名以及它們的證書到期日期。
配置自動更新
在安裝時,Certbot 會自動新增 Cron 或 Systemd Timer 任務來檢查更新。如果你想確保所有內容正常運作,可以在 Cron 中新增測試任務:
sudo crontab -e
新增以下行:
0 0 * * * certbot renew --quiet
這條命令會在每天午夜檢查並更新證書。--quiet
參數會禁用無用的輸出信息。
手動更新
如果你想手動更新證書(舉例來說,為測試目的),請使用:
sudo certbot renew
5. 啟用自動 HTTP → HTTPS 重導
你的网站还是可能通过 HTTP 被访问,但这是不安全的。咱們來設置把所有請求重導至 HTTPS。
對於 Nginx
Certbot 可以在頒發證書時自動配置重導。如果你之前沒有啟用這個功能,可以手動在你的虛擬主機配置文件中添加重導:
server {
listen 80;
server_name example.com www.example.com;
return 301 https://$host$request_uri;
}
重新加載 Nginx 來應用更改:
sudo systemctl restart nginx
對於 Apache
Certbot 也支持自動啟用重導。如果你跳過了這一步,則可以在你的虛擬主機文件中添加:
<VirtualHost *:80>
ServerName example.com
Redirect permanent / https://example.com/
</VirtualHost>
重新啟動 Apache:
sudo systemctl restart apache2
6. 錯誤調試
如果出現問題,先查看日誌:
對於 Nginx
sudo tail -f /var/log/nginx/error.log
對於 Apache
sudo tail -f /var/log/apache2/error.log
配置測試
同時檢查 web 伺服器的配置:
對於 Nginx:
sudo nginx -t
對於 Apache:
sudo apachectl configtest
檢查 HTTPS
確保你的網站可以通過 HTTPS 訪問:
curl -I https://example.com
你應該看到狀態 200 OK
和 Strict-Transport-Security
,這表示 HTTPS 正常運行。
現在,你準備好建立安全的 HTTPS 網站了。你的用戶會開心,Google 也會開心,而你可以安心入睡,因為你的數據已經被保護免受網絡壞蛋的攻擊。
GO TO FULL VERSION