大概距今五六年前,當時一個網站想要有HTTPS得花不少錢來買憑證。這幾年開始出現免費的憑證頒發單位,因此HTTPS是現代網站的基本配備了。本文介紹如何在Linux上使用CertBot獲取憑證,並且自動更新。
什麼是HTTPS與SSL憑證
SSL的全名是Secure Sockets Layer,用來驗證提供服務的伺服器真的是這個網站的提供者。但是現在說的SSL只是個俗稱,目前網路上使用的是TLS(Transport Layer Security),是比SSL更安全的新版本。而HTTPS就是有使用憑證驗證伺服器是本尊,而且傳輸過程有加密的HTTP協定。使用HTTPS才能確保使用者連上的是正確的伺服器,而且傳輸過程不易被他人監控。
SSL憑證由特定的驗證單位頒發,驗證時有DV、OV、EV三種等級,因此像是一些銀行或是刷卡服務的網站,瀏覽器的網址列看起來會不太一樣,代表他們使用更高級更複雜的方式來驗證。
Let’s Encrypt驗證方式
Let’s Encrypt是由各大企業贊助而成立的憑證發放單位,使用者可以免費使用,每次頒發的憑證效期為三個月,所以每三個月要重新驗證一次。
Let’s Encrypt要驗證申請者是否真的有網站的操控權限,因此會要求申請人在網站內指定的資料夾放上指定的檔案,如同Google Search Console的驗證方式。這種驗證方式是比較初階的,只能確保申請者有網站的操控權限,但是大部分情況下已經足夠使用了。
使用CertBot
目前有非常多第三方程式可以協助驗證過程,在本篇教學中我使用CertBot來驗證,如果是使用Apache httpd的用戶也可以透過CertBot幫忙驗證。
安裝CertBot
sudo apt update
sudo apt install certbot python3-certbot-nginx -y
註冊憑證
sudo certbot --nginx --redirect -d example.com -d www.example.com
如果你有好幾個網址都是同一個網站的別名,可以增加-d
標籤來添加網址,沒有別名的話就寫一個即可。
驗證完成後CertBot會添加listen 443 ssl
等相關設定到Nginx設定檔中。指令最後的--redirect
參數會讓CertBot幫忙修改listen 80
的設定,將http的Request轉址到https的網址。不需要自動轉址可以改成--no-redirect
,如果都不設定,CertBot會在執行時詢問。
沒特殊需求的話,建議使用--redirect
讓CertBot自動轉址就可以了,這樣當使用者連上http://
的網站時,會自動被轉到https://
,到這裡就設定完成囉。
更新憑證
Let’s Encrypt頒發的憑證只有三個月有效期限,因此三個月後就要重新驗證一次,可以使用以下指令。
sudo certbot renew # 手動更新憑證
sudo certbot renew --dry-run # 測試憑證更新程序
但是CertBot其實會自動更新憑證,因此通常情況下我們不必擔心憑證過期。CertBot使用Crontab來定時執行,可以使用以下指令檢查CertBot是否有啟動。
sudo systemctl status certbot.timer
正常情況會看到Active: active
的標示,代表正常啟動,可以使用以下指令來開關他,但通常應該沒有人會把它關閉啦。
sudo systemctl enable certbot.timer # 開啟服務
sudo systemctl disable certbot.timer # 關閉服務