Let’s Encrypt已經推出一段時間了,它是一個多方認可的HTTP加密服務,而且還是免費的,這下我們不用再支付昂貴的年費了!
為麼要用SSL?
- SSL幫助加密你的網頁傳輸,防止資料外流
- 讓瀏覽器信任你的網頁
- 付費系統等等必須使用SSL
- 現在都免費了,還在考慮甚麼…
Let’s Encrypt的限制
- 因為加密了所以速度比較慢,這是HTTPs的缺點
- 90天要更新一次證書
一﹒安裝certbot
這裡就介紹常用的Ubuntu + Nginx的安裝方法,其實就只是根據官方供的certbot的指示做,但還是簡單講一下吧 首先來安裝letsencrypt
sudo apt-get install letsencrypt
然後就是生產證書,把以下的指令修改成你的網域和網頁的根目錄,假設你的網域是example
,根目錄是/var/www/example
letsencrypt certonly --webroot -w /var/www/example -d example.com -d www.example.com
上面指令將會在/etc/letsencrypt/live/example.com/
產生四個檔案
- cert.pem
- chain.pem
- fullchain.pem
- privkey.pem
二﹒設定Nginx
我們把本來使用的port 80
換成port 443
,然後加入fullchain.pem
和privkey.pem
兩張證書,就像這樣
server {
listen *:443 ssl http2;
listen [::]:443 ssl http2;
ssl_certificate /etc/letsencrypt/live/example.com/ful 大专栏 免費把網頁升級至HTTPs!Let's Encrypt + Nginx的SSL安裝教學lchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
root /var/www/example;
...
}
然後我們可以選擇把所有http的請求自動轉到https
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name example.com www.example.com;
return 301 https://$server_name$request_uri;
}
最後從新載入nginx的設定就大功告成了!
sudo systemctl reload nginx
自動更新證書
由於Let’s Encrypt的限制,證書需要每90天更新一次,所以certbot很貼心地提供了一個更新的指令讓我們使用,而且也建議我們用cron
或是systemd
每天檢查兩次,我們不用擔心更新過多的問題,因為快到期之前即使運行了指令它也是不會更新的,所以我們可以每天的1AM和1PM各檢查更新一次,這樣就做到自動更新的效果了
這裡我選擇用crontab
sudo crontab -e
初次使用應該會出現以下畫面,個人習慣用nano,所以選2
no crontab for root - using an empty one
Select an editor. To change later, run 'select-editor'.
1. /bin/ed
2. /bin/nano <---- easiest
3. /usr/bin/vim.basic
4. /usr/bin/vim.tiny
Choose 1-4 [2]:
選擇以後會跳到編輯版面,在最下面輸入以下語句
10 1,13 * * * /usr/bin/letsencrypt renew >> /var/log/le-renew.log
15 1,13 * * * /etc/init.d/nginx reload
最後按Ctrl + X
儲存後系統便會依據時間自動執行了!