[教學] SSL 憑證安裝與架設 Nginx CentOS 7.0

SSL 對現代網路服務來說已經不是潮不潮的問題了,而是具備商業競爭的必要性。從 2014 年中 Google 宣布 HTTPS as a ranking signal 開始,使用 https 小綠鎖的網站在搜尋排名上就開始有了優勢,大型網站如 Yahoo 即便服務眾多也從善如流,到了今年 2015 更是越來越多人投入,一堆 [wc_highlight color=”red”]Certificate Authority(CA)[/wc_highlight] 也趁此撈了一筆 (笑)。

最近拿一台 Linode VPS 來練功,想了解對於小型網站來說建置難度高不高。先講結論,難度並不高大約是 2~3 天內的理解、設定、與調教,但有一些眉角如果提早知道可以省去不少時間,摘要聞香一下:

  1. 別傻的花時間踹 CloudFlare 的免費或付費版本了,CF 對台灣用戶來說是一隻慢速大烏龜。
  2. 高等憑證 (EV) 除了小鎖之外還可以掛上公司名稱,普通憑證只有小鎖,但已經夠賞心悅目。
  3. 憑證是要購買的,以年約來付費認證。
  4. 查到的憑證好貴?看需求。單一網域認證有一年均 500 NTD 的可以買。
  5. 設置完成後伺服器負擔也會增加,Web Server 可能會因此需要優化或升級。

心理準備這樣就充足了,讓我們看下去。本篇以 Linode + CentOS + Nginx 為範例。

SSL 基本設置

要完成的事情說穿了很簡單,首先在伺服器端建立目錄:

[wc_box color=”info” text_align=”left”]

sudo mkdir /etc/nginx/ssl
cd /etc/nginx/ssl

[/wc_box]

接著產生 Server Certificate ,這是很重要的私密金鑰日後設定還會需要,請妥善保管並將權限設為 400。然後用 Server Certificate 產生 Certificate Signing Request (CSR),這是之後要傳送給 Certificate Authority(CA) 的檔案:

[wc_box color=”info” text_align=”left”]

sudo openssl genrsa -des3 -out myblog.key 2048
sudo openssl req -new -key myblog.key -out myblog.csr
sudo cp myblog.key myblog.key.orig
sudo openssl rsa -in myblog.key.orig -out myblog.key

[/wc_box]

以上產生 csr 會需要填寫一些憑證的基本資料,其中國家的代碼請填大寫的 TW ,其他資訊就依照實際填寫應該不會有問題。填寫完畢之後就會得到一個 .csr 檔,以上面的例子來說就是 myblog.csr。打開 myblog.csr 將內容複製起來,準備貼到網路上的憑證中心 Certificate Authority(CA)。

接著就到網路上找一家 CA 購買憑證,推薦 ssls.com 這家還不錯,我就是在這裡找到便宜合用的方案。購買之後,將 CSR 丟給 SSLs.com 的線上處理系統去簽署,簽署的過程會需要註冊帳號,並且確認你是網站的擁有者。一切就緒簽署好了,大約等個 5 分鐘的處理時間,就可以下載 .crt 檔了。

ssls-Activation
圖一、選擇 Purchased certs 去看自己買到的憑證

ssls-Activation1
圖二、選擇 Activate 啟用憑證

ssls-download
圖三、右上角有個 Download,把買來的憑證載到伺服器上吧!

把 .crt 檔放到先前建立的目錄 (/etc/nginx/ssl) 當中 ,接著設定 Nginx 的指向即可。

[wc_box color=”info” text_align=”left”]

# HTTPS server
server {
listen 443;
server_name myblog.com;
ssl on;
ssl_certificate /etc/nginx/ssl/myblog.crt;
ssl_certificate_key /etc/nginx/ssl/myblog.key;
}

[/wc_box]

上方 myblog.crt 就是下載回來的 Certificate,myblog.key 就是最前面步驟的私密金鑰,再次用上囉!重新啟用 Nginx

[wc_box color=”info” text_align=”left”]

systemctl restart nginx.service

[/wc_box]

同時將所有 http 連線永久轉址前往 https

[wc_box color=”info”]

server {
    listen 80;
    server_name YOUR_DOMAIN_NAME;
    return 301 https://$host$request_uri;
}

[/wc_box]

打開網站,小鎖這時候應該要正常啟用囉!如果發現是黃色驚嘆號的鎖,那麼請檢查網頁內容是不是有 http:// 開頭的圖片或是 static file 的連結。 https 安全性網站是容不下任何不安全載檔的!看來很好設定嘛… 對一半!故事沒這麼快完。

您可能也會喜歡…

1 個回應

  1. 11 月 21, 2017

    […] 這篇提供幾個處理 Nginx 502 Bad Gateway 的解決方法。我的使用情境,是在升級使用 SSL 去產出 https 開頭的安全網頁之後,開啟頁面時會不定時出現這個的錯誤。主機環境是 LEMP (Linux + Nginx + MySQL + PHP) 。因為 SSL 會耗費較多主機資源,所以如果你也使用了 SSL ,請先參考這一篇 [教學] SSL 安裝與架設 NGINX CENTOS 7.0 進行基本的效能調教。當調教之後仍舊無法解決,再試試看以下方式。 […]

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *