SSL/TLS 憑證的申請與設定
前言
越來越多網站的開頭都是 https 而非 http,究竟多個 s 代表什麼呢? “S” 指的就是安全性(Security),如果不使用 https 的話會有以下缺點:
- 不利於 SEO 排名
- 得不到用戶的信任
- 有數據資料外流的風險
另外如果前端是使用 vercel 來架設的話,打 http 是不會成功的。所以本文要來介紹如何設定 SSL/TLS 加密使讓網站可以用 HTTPS 的協定,那以下先概念性的介紹。
HTTPS
當你在瀏覽網頁時,你知道你的資料是怎麼傳遞的嗎?HTTP(超文本傳輸協議)就像一種快遞服務,它將你的資料送到目的地,但是這些資料是裸露的,就像明信片一樣,可能被偷窺。
現在,如果能讓明信片包起來寄出去不是比較安全嗎?這就是HTTPS(安全超文本傳輸協議)。HTTPS 將你的資料放進一個安全的密封箱,確保它不會在過程中被別人偷看或擅自修改。就像是送禮物一樣,不會在路上被人打開。
SSL/TLS
那 HTTPS 是如何做保護的呢? 安全通訊端層(Secure Socket Layer, SSL)被用於在瀏覽器與伺服器兩端之間建立加密連線。 那其實 TLS 是SSL的經過更新的、更安全的版本,一般多通稱這樣的安全性憑證為 SSL。
獲取 SSL 憑證
使用 SSL for free 來獲得憑證
- 在 SSL for free 輸入 IP
- 下載 Auth File,並照著 SSL for free 的指示使連到
http://your_ip/.well-known/pki-validation/xx.txt
時能顯示剛下載的 Auth File - SSL for free 認證成功後就可以下載 SSL 憑證
在專案上實作 SSL
實作 SSL 只需要修改前一篇文章建立的 /your/path/nginx/xxx.conf
即可
把前面得到的
certificate.crt
與private.key
放到/etc/ssl/
或你自訂的資料夾中修改專案中配置的 Nginx
server {
listen 80;
server_name your_ip; // 需要修改成自己的 public ip
# Redirect to HTTPS
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl;
ssl_certificate /etc/ssl/certificate.crt;
ssl_certificate_key /etc/ssl/private.key;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_set_header HOST $host;
proxy_set_header X-Real-IP $remote_addr;
}
}接著重新載入
sudo service nginx reload
最後回到網頁應該可以發現已經由 http 變成 https ~
小提醒:前端打 API 時如果原本是打 http,那現在要改成 https 哦