開發用 SSL 自簽設定流程
由於最近在開發與第三方登入有關的服務,需要設定 SSL 自簽才能正確與第三方服務溝通。本文把設定的過程一步一步的紀錄下來,帶你一步步的認識並完成 SSL 自簽設定。
什麼是 SSL 自簽
SSL 為 Secure 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
需要先準備這兩個工具:
$ 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 的服務,透過服務開關。
以上就是這次的自簽設定分享啦,內文有錯誤或不清楚的地方,也歡迎各路高手補充囉。