Lazy loaded image
技术分享
Lazy loaded image三步快速生成本地开发证书(mkcert)
字数 914阅读时长≈ 3 分钟
2025-6-3
type
status
date
slug
summary
category
tags
create_time
Jun 3, 2025 03:32 AM
icon
password
my_create_time

🧩 背景

在集成如 Dex 等 OAuth/OpenID Connect 身份认证服务时,服务端 强制要求使用 HTTPS,即使是在本地开发环境中。
许多开发者常常遇到的问题包括:
  • Dex 启动时报错:x509: certificate signed by unknown authority
  • 回调 URI 必须是 https://,否则拒绝认证
  • 本地浏览器、Postman 等工具频繁弹出“证书不安全”警告
  • Let's Encrypt 只能为可公开验证的域名颁发证书,不支持 localhost
为此,我们需要一种简单、安全、快速的方式为本地环境生成受信任的 HTTPS 证书,mkcert 正是为此而生的工具。

🛠 使用场景

  • 使用 Dex 或其他 OAuth 服务的开发环境认证回调
  • 使用 HTTPS 的本地 API 网关、反向代理、前端框架等
  • 本地运行 Kubernetes Ingress、Traefik、Istio 等需要 TLS 的组件
  • 避免在调试工具(如 curl、Postman、浏览器)中关闭安全校验

🚀 三步生成本地开发证书(使用 mkcert)

✅ 第一步:安装 mkcert 和本地信任根证书

📌
PS:mkcert -install 会在系统和常见浏览器中添加一个本地根证书,使你生成的证书被认为是“受信任”的。

✅ 第二步:生成本地可信的 HTTPS 证书

例如,Dex 通常监听在 127.0.0.1:5556,你可以为 localhost 或开发域名生成证书:
输出结果:
推荐使用 .local 域名,如 dex.local,并添加到 /etc/hosts:

✅ 第三步:配置 Dex 使用自签 HTTPS 证书

修改 Dex 的配置文件(如 config.yaml):
然后启动 Dex:
此时 Dex 将使用你本地签发的 HTTPS 证书运行,并可被浏览器、前端、API 客户端等安全访问。
📌
PS:若本地使用的 Nginx 反向代理,可以直接把证书挂在 Nginx 上,这里就不需要配置了,推荐本地统一走代理挂证书。

🔐 示例:前端访问本地 Dex 实例

前端回调地址必须设置为 https://dex.local:5556/callback,并确保浏览器识别证书为受信任的(通过 mkcert 添加的根证书实现)。

🧾 小贴士

  • 若使用容器部署 Dex,请挂载生成的证书文件到容器内部路径
  • 如果是在 Kubernetes 中部署,可通过 mkcert 生成后,使用 Secret 挂载到 Pod 中
  • 结合 TraefikCaddynginx 的本地 HTTPS 测试也适用相同证书方式

✅ 总结

对于强制要求 HTTPS 的服务(如 Dex 身份认证、OIDC 服务等),使用 mkcert 快速生成本地可信证书,是提升开发效率、避免安全报错的首选方式。
它比 OpenSSL 更简单,生成的证书系统自动信任,可直接用于浏览器、服务端、Docker、K8s 等各类本地开发环境。
💡
有关文章的任何疑问,欢迎您在底部评论区留言,一起交流~
若文章对您有帮助,欢迎 请我喝杯咖啡~
 
上一篇
Nginx+ACME服务器搭建
下一篇
nCalendar 单点登录之 Dex 统一退出

评论
Loading...