繁體中文(香港)
  • https
  • tls
  • nginx
  • express
  • proxy

處理本地 HTTPS 開發

探索如何在你的開發工作流程中實現本地 HTTPS,使用 Mkcert 等工具,通過 Express.js 和 Next.js 的逐步指南。

Sijie
Sijie
Developer

當開發 web 應用程式時,特定情境即使在本地環境中也需要 HTTPS。無論是你在整合安全的第三方 API,測試只有 HTTPS 的功能如服務工作人員和 HTTP/2,或模擬生產環境以確保無縫部署,HTTPS 都變得至關重要。此外,某些瀏覽器 API——例如地理定位、推送通知和憑據管理——需要安全的上下文才能有效運行。

例如,Logto OSS 默認要求 HTTPS,除非是 localhost,在這種情況下,學習設置本地 HTTPS 可以節省你的時間。本文將指導你設置本地開發的 HTTPS,介紹如 Mkcert 這樣的工具來簡化過程。

localhost 的作用及只有 HTTPS 的功能

localhost 是一個特殊的域名,可以處理許多只有 HTTPS 的功能,如服務工作人員、安全 cookie、HTTP/2 和其他瀏覽器 API 可以在 http://localhost:xxxx 中運作良好,所以你可能不總是需要本地 HTTPS,先嘗試 localhost 吧!

嘗試 Cloudflare 隧道

之前在這篇文章中介紹過,Cloudflare 隧道可以輕鬆地將你的本地服務公開到互聯網,並準備好 HTTPS。

設置本地 HTTPS

上述 2 個選項無法解決你的問題?那我們就來設置本地 HTTPS。在以下步驟中,我們假設本地的域名是 example.com

步驟 1:更新 hosts 文件

在開始之前,確保目標域名解析到你的本地機器,可以通過更新 hosts 文件來完成。打開 Linux/macOS 上的 /etc/hosts 或 Windows 上的 C:\Windows\System32\drivers\etc\hosts,並添加以下行:

步驟 2:生成證書

HTTPS 的第一件事就是證書。在生產環境中,可以通過 "Let's encrypt" 等工具完成或從你的服務提供商購買證書。但在本地開發中,我們可以直接生成證書。

Mkcert 是一個簡單的零配置工具,可以用你想要的任何名稱製作本地信任的開發證書。

首先,按照官方指南安裝 mkcert,假設你在使用 macOS:

對於 Windows 和 Linux,請查看這個鏈接

現在 mkcert 已經準備好使用,運行這個命令來生成一個本地 CA 並將根證書儲存到你的系統信任庫中。要了解更多有關 "CA" 和證書的信息,請查看 Cloudflare 的文件

然後,生成本地 SSL 證書

這會在你的目錄中創建 example.com.pemexample.com-key.pem 文件。

步驟 3:在你的應用中設置 HTTPS

有了證書文件,你現在可以在你的應用中啟用 HTTPS。與生產環境不同,生產環境中 HTTPS 由 Nginx 等反向代理處理,在本地開發中,我們可以直接在 web 應用程式中設置。讓我們以 Express 為例。

使用以下代碼創建一個簡單的 Express 服務器:

運行應用,訪問 https://example.com 來查看你的安全 Express 應用在運作。

為 Logto OSS 啟用 HTTPS

Logto OSS 默認要求 HTTPS,除非是 localhost,如果你想在其他域名上本地運行 Logto,你需要設置本地 HTTPS。

  1. 設置 Logto:請按照鏈接在你的本地機器上設置 Logto:https://docs.logto.io/docs/get-started/。
  2. 準備證書:使用 mkcert 生成兩個 .pem 文件並將它們放置在一個目錄中。
  3. 設置環境變量:提供 HTTPS_CERT_PATHHTTPS_KEY_PATH 來通過 Node 啟用 HTTPS,請查看此鏈接了解更多。

總結

設置本地開發的 HTTPS 並不像看起來那麼複雜。在 Mkcert 等工具的幫助下,生成受信任的本地證書變得快速而簡單。儘管 localhost 粗體 通常能處理許多只有 HTTPS 的功能,有時你需要完整的 HTTPS 支援,這份指南幫助你做到這一點。無論你是在測試 API,使用 Logto OSS,還是只是模擬生產環境,遵循這些步驟會確保你為安全、無縫的開發做好準備。