mkcert 完全指南:本地 HTTPS 开发的终极解决方案
为什么值得读这篇文章?
- 本文适合: 前端开发者、全栈工程师、DevOps 工程师、需要本地 HTTPS 调试的技术人员
 - 如果你在问: “如何在本地开发环境使用 HTTPS?”、“怎样避免浏览器的安全警告?”、“本地如何测试 HTTP/2 或 WebSocket?“,这篇文章正是为你准备的
 - 解决痛点: 告别繁琐的 OpenSSL 配置,一键生成受信任的本地 HTTPS 证书
 
什么是 mkcert?
mkcert 是一个专为本地开发环境设计的 HTTPS 证书生成工具。它会自动在系统或浏览器中安装本地 CA(根证书),并用它来签发域名或 IP 对应的证书,让本地开发环境可以像生产环境一样使用 HTTPS。
核心优势
- 零配置信任: 自动处理证书信任链,无需手动导入
 - 开发体验友好: 消除浏览器”不安全连接”警告
 - 多平台支持: 支持 macOS、Windows、Linux
 - 场景广泛: 适用于 HTTP/2、gRPC、WebSocket 等需要 TLS 的场景
 
安装 mkcert
macOS 安装
# 使用 Homebrew 安装
brew install mkcert
# 如果需要支持 Firefox
brew install nss
Windows 安装
# 使用 Chocolatey
choco install mkcert
# 或使用 Scoop
scoop install mkcert
Linux 安装
# Ubuntu/Debian
sudo apt install libnss3-tools
brew install mkcert
# 或直接下载可执行文件
# 访问 https://github.com/FiloSottile/mkcert/releases
基础使用指南
第一步:安装本地 CA
mkcert -install
这个命令会:
- 生成并安装一个本地 CA(根证书)
 - 将证书存储到系统目录:
- macOS: 
~/Library/Application Support/mkcert - Windows: 
%LOCALAPPDATA%\mkcert - Linux: 
~/.local/share/mkcert 
 - macOS: 
 - 自动导入到系统和 Firefox 信任库
 
第二步:生成域名证书
# 为单个域名生成证书
mkcert example.com
# 为多个域名和 IP 生成证书
mkcert example.com www.example.com 127.0.0.1 ::1
# 生成通配符证书
mkcert "*.test" "*.localhost" localhost 127.0.0.1 ::1
生成的文件:
example.com.pem- SSL 证书example.com-key.pem- 私钥文件
自定义输出文件名
mkcert -cert-file mycert.pem -key-file mykey.pem example.com
进阶技巧与配置
生成客户端证书(双向 TLS)
# 用于 mTLS 认证场景
mkcert -client client.example.com
查看 CA 信息
# 显示 CA 文件存储路径
mkcert -CAROOT
CA 目录包含:
rootCA.pem- 根证书rootCA-key.pem- 根私钥
自定义证书有效期
# 生成 10 年有效期的证书
mkcert -days 3650 example.com
实战应用场景
与 Nginx 集成
server {
    listen 443 ssl;
    server_name example.com;
    ssl_certificate     /path/to/example.com.pem;
    ssl_certificate_key /path/to/example.com-key.pem;
    location / {
        root /var/www/html;
        index index.html;
    }
}
Node.js HTTPS 服务器
const fs = require("fs");
const https = require("https");
const options = {
  key: fs.readFileSync("./example.com-key.pem"),
  cert: fs.readFileSync("./example.com.pem"),
};
https
  .createServer(options, (req, res) => {
    res.writeHead(200, { "Content-Type": "text/html" });
    res.write("<h1>Hello HTTPS!</h1>");
    res.end();
  })
  .listen(443, () => {
    console.log("HTTPS Server running on https://example.com");
  });
Docker 容器中使用
# Dockerfile
FROM nginx:alpine
COPY example.com.pem /etc/ssl/certs/
COPY example.com-key.pem /etc/ssl/private/
COPY nginx.conf /etc/nginx/nginx.conf
常见问题解答
Q1: 浏览器仍然显示”不安全”?
解决步骤:
- 确认执行过 
mkcert -install - Firefox 用户需要安装 
nss包 - 重启浏览器
 - 检查域名是否与证书匹配
 
Q2: 如何在移动设备上信任证书?
操作方法:
# 1. 找到 CA 证书位置
mkcert -CAROOT
# 2. 将 rootCA.pem 传输到移动设备
# 3. 在移动设备的设置中导入证书
Q3: 证书过期了怎么办?
# 重新生成证书
mkcert example.com
# 或指定更长有效期
mkcert -days 3650 example.com
Q4: 如何完全卸载 mkcert?
# 卸载本地 CA
mkcert -uninstall
# 删除生成的证书文件
rm *.pem
完整命令参考
| 命令 | 功能说明 | 
|---|---|
mkcert -install | 安装本地 CA | 
mkcert example.com | 为指定域名生成证书 | 
mkcert a.com b.com 127.0.0.1 | 为多个域名/IP 生成证书 | 
mkcert -client name | 生成客户端证书 | 
mkcert -cert-file c.pem -key-file k.pem name | 指定输出文件名 | 
mkcert -CAROOT | 显示 CA 文件目录 | 
mkcert -uninstall | 卸载本地 CA | 
mkcert -ecdsa example.com | 生成 ECDSA 类型证书 | 
mkcert -days 365 example.com | 指定证书有效期 | 
最佳实践建议
开发环境配置
- 统一域名规范: 使用 
.local或.test后缀 - 版本控制: 将证书文件加入 
.gitignore - 团队协作: 共享 CA 根证书给团队成员
 - 自动化脚本: 编写脚本自动生成和配置证书
 
安全注意事项
- 仅限开发环境: 不要在生产环境使用 mkcert
 - 私钥保护: 妥善保管生成的私钥文件
 - 定期更新: 定期重新生成证书避免过期
 
总结
mkcert 是本地 HTTPS 开发的利器,它极大简化了证书生成和信任配置的复杂度。通过本文的完整指南,你可以:
- 快速搭建本地 HTTPS 环境
 - 解决浏览器安全警告问题
 - 支持 HTTP/2、WebSocket 等现代协议
 - 提升本地开发体验
 
无论是前端开发、API 调试,还是微服务测试,mkcert 都能让你的本地开发环境更接近生产环境,提高开发效率和代码质量。
立即开始: 安装 mkcert,让你的本地开发告别 HTTP,拥抱更安全的 HTTPS!