跳至主要内容

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 來獲得憑證

  1. 在 SSL for free 輸入 IP
  2. 下載 Auth File,並照著 SSL for free 的指示使連到 http://your_ip/.well-known/pki-validation/xx.txt 時能顯示剛下載的 Auth File
  3. SSL for free 認證成功後就可以下載 SSL 憑證

在專案上實作 SSL

實作 SSL 只需要修改前一篇文章建立的 /your/path/nginx/xxx.conf 即可

  1. 把前面得到的 certificate.crtprivate.key 放到 /etc/ssl/ 或你自訂的資料夾中

  2. 修改專案中配置的 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;
    }
    }
  3. 接著重新載入

    sudo service nginx reload
  4. 最後回到網頁應該可以發現已經由 http 變成 https ~

小提醒:前端打 API 時如果原本是打 http,那現在要改成 https 哦