处理本地 HTTPS 开发
探索如何在你的开发工作流程中实现本地 HTTPS,使用 Mkcert 等工具以及针对 Express.js 和 Next.js 的逐步指南。
在开发 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.pem
和 example.com-key.pem
文件。
步骤 3:在你的应用中设置 HTTPS
有了证书文件,就可以在应用中启用 HTTPS。与生产环境中反向代理如 Nginx 处理 HTTPS 不同,在本地开发中,我们可以直接在 Web 应用程序中设置。以 Express 为例。
使用以下代码创建一个简单的 Express 服务器:
运行该应用程序,然后访问 https://example.com
查看你的安全 Express 应用程序。
启用 HTTPS 以用于 Logto OSS
Logto OSS 默认需要 HTTPS,除非是 localhost
,如果你想在其他域名下本地运行 Logto,你需要设置本地 HTTPS。
- 设置 Logto:按照链接在你的本地机器上设置 Logto:https://docs.logto.io/docs/get-started/。
- 准备证书:使用
mkcert
生成两个.pem
文件,并将其放在一个目录中。 - 设置环境变量:提供
HTTPS_CERT_PATH
和HTTPS_KEY_PATH
以通过 Node 启用 HTTPS,查看此链接了解更多信息。
总结
为本地开发设置 HTTPS 并不像它看起来那么复杂。在 Mkcert 等工具的帮助下,生成可信的本地证书变得快速而简单。虽然 localhost
Bold 通常处理许多 HTTPS 专用功能,但有时你需要完整的 HTTPS 支持,本指南可以帮助你实现这一点。无论你是在测试 API、与 Logto OSS 一起工作,还是简单地复制生产条件,遵循这些步骤将确保你准备好进行安全、无缝的开发。