简体中文
  • https
  • tls
  • nginx
  • express
  • proxy

处理本地 HTTPS 开发

探索如何在你的开发工作流程中实现本地 HTTPS,使用 Mkcert 等工具以及针对 Express.js 和 Next.js 的逐步指南。

Sijie
Sijie
Developer

在开发 Web 应用程序时,特定场景即使在本地环境也需要 HTTPS。无论是与安全的第三方 API 集成,测试 HTTPS 专用功能(如 service worker 和 HTTP/2),还是复制生产条件以确保无缝部署,HTTPS 都变得至关重要。此外,某些浏览器 API(如地理定位、推送通知和凭据管理)需要安全的上下文才能有效运行。

例如,Logto OSS 默认需要 HTTPS,除非是 localhost,在这种情况下,了解如何为本地开发设置 HTTPS 可以节省你的时间。本文将指导你设置本地开发 HTTPS,介绍像 Mkcert 这样的工具来简化过程。

localhost 和 HTTPS 专用功能的作用

localhost 是一个特殊域,可以处理许多 HTTPS 专用功能,如 service worker、secure cookies、HTTP/2 和其他浏览器 API 可以在 http://localhost:xxxx 中正常工作,所以你可能并不总是需要本地 HTTPS,先尝试使用 localhost

尝试 Cloudflare 隧道

这篇文章中先前介绍过,Cloudflare 隧道可以轻松地将你的本地服务暴露给互联网,HTTPS 已就绪。

设置本地 HTTPS

以上两种选项无法解决你的问题?那么我们来设置本地 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。与生产环境中反向代理如 Nginx 处理 HTTPS 不同,在本地开发中,我们可以直接在 Web 应用程序中设置。以 Express 为例。

使用以下代码创建一个简单的 Express 服务器:

运行该应用程序,然后访问 https://example.com 查看你的安全 Express 应用程序。

启用 HTTPS 以用于 Logto OSS

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 等工具的帮助下,生成可信的本地证书变得快速而简单。虽然 localhostBold 通常处理许多 HTTPS 专用功能,但有时你需要完整的 HTTPS 支持,本指南可以帮助你实现这一点。无论你是在测试 API、与 Logto OSS 一起工作,还是简单地复制生产条件,遵循这些步骤将确保你准备好进行安全、无缝的开发。