開發用 SSL 自簽設定流程

Schaos
Schaos’s Blog
Published in
4 min readMar 23, 2019

--

由於最近在開發與第三方登入有關的服務,需要設定 SSL 自簽才能正確與第三方服務溝通。本文把設定的過程一步一步的紀錄下來,帶你一步步的認識並完成 SSL 自簽設定。

什麼是 SSL 自簽

SSLSecure Sockets Layer (安全通訊協定) 的縮寫,後來發展成 Transport Layer Security,傳輸層安全協定 (TLS);簡單說就是在通訊的過程中,透過特定的演算法把傳遞內容加密,防止內容被竊取或竄改。

例如我們常見的 https 即為透過 SSL/TLS 加密 http 傳送的內容。 自簽 即為自己簽屬的 憑證。 憑證 是用來證明 「這個網址是誰」,是用來設定 SSL 的。

準確的說應該為 「這把公鑰是誰的」,不過先這樣理解應該比較好懂 XD。

例如,為什麼我們可以知道 https://www.google.com/ 是 Google 而不是 hao123?因為瀏覽器信任了一連串的憑證,證明了這個位置就是 Google。

為什麼需要 SSL 自簽

由於 https 使用 非對稱性加密,仰賴 公開金鑰認證,因此在本地開發時,你的測試環境就會一直被瀏覽器及部分安全性套件判定成 不安全;設定 SSL 自簽,即為 透過一組自己發行、自行認證、自己相信的憑證,來設定 SSL 加密,就可以騙過瀏覽器及安全性套件,讓你順利的完成開發測試。

也就是說,這是一個 自己騙自己 的過程。

準備 mkcert、Nginx

需要先準備這兩個工具:

  1. mkcert,用來生成 自簽憑證
  2. Nginx,作為 反向代理伺服器。 Mac 也可以透過 brew 直接安裝
$ brew install mkcert
$ brew install nginx

如果憑證或反向代理伺服器有別的替代方案,也可以自行設定、準備。

生成憑證

$ mkcert -install
$ mkcert your-domain-name.com "*.wildcard.com.tw" localhost 127.0.0.1 ::1

這邊請設定你想要設定到的 domain,不要傻傻的複製貼上結果不能用啊 XD

正確完成後,你會得到兩隻檔案:

  • certificate: *.pem
  • private-key: *-key.pem

設定反向代理

nginx.conf 的 server 區塊中,加上剛剛生成的 key。 例如:

server {
server_name your-domain-name.com;
listen 80;
listen 443 ssl;
ssl_certificate D:\path\to\key\domain.pem;
ssl_certificate_key D:\path\to\key\domain-key.pem;
location / {
proxy_pass http://127.0.0.1:3333;
}
}

上例中 server_name 用了 hosts 檔案中額外設定的別名,一樣是指到 127.0.0.1:3333。 以上設定是讓 Nginx 去聽 443 port 提供 SSL (https) 的服務。並將 request 轉傳給原本 http 的服務,也就是反向代理。

驗證結果

由 command-line 啟動 Nginx:

$ nginx

接著便能打開瀏覽器,透過 https://your-domain.com 之類的,確認是不是有設定成功。 如果 nginx.conf 設定錯誤,在修改後需要將 Nginx 關閉再重啟,才能看到效果; Mac 可以透過:

$ nginx -s stop

來關閉 Nginx,Windows 則只能從 工作管理員 砍掉 process 囉。

嫌麻煩也可以註冊成 Windows 的服務,透過服務開關。

以上就是這次的自簽設定分享啦,內文有錯誤或不清楚的地方,也歡迎各路高手補充囉。

--

--