mkcert 本地开发 SSL 证书教程
mkcert 是一款零配置的本地 CA 工具,可以生成被本地系统信任的 SSL 证书。在开发环境中使用 HTTPS 时,传统的自签名证书会导致浏览器显示安全警告,而 mkcert 生成的证书会被自动信任,让本地开发体验与生产环境一致。本文将介绍如何在搬瓦工 VPS 和本地机器上使用 mkcert。
一、mkcert 的优势
- 零配置:无需理解 CA 架构和 OpenSSL 命令。
- 自动信任:自动将本地 CA 安装到系统信任存储。
- 无安全警告:生成的证书被浏览器完全信任。
- 支持多平台:Linux、macOS、Windows 均支持。
- 支持多域名:一个证书可以包含多个域名和 IP。
注意:mkcert 仅适用于开发环境。生产环境请使用 acme.sh 申请正式的 SSL 证书。
二、安装 mkcert
2.1 Linux(搬瓦工 VPS)
# 安装依赖
apt update
apt install libnss3-tools -y
# 下载 mkcert
wget https://github.com/FiloSottile/mkcert/releases/latest/download/mkcert-linux-amd64
mv mkcert-linux-amd64 /usr/local/bin/mkcert
chmod +x /usr/local/bin/mkcert
2.2 macOS
brew install mkcert
brew install nss # 如果使用 Firefox
2.3 Windows
choco install mkcert
2.4 验证安装
mkcert --version
三、初始化本地 CA
mkcert -install
此命令会创建一个本地 CA 根证书,并自动安装到系统的证书信任存储中。在 Linux 上会安装到 NSS 数据库,macOS 上安装到系统钥匙串。
# 查看 CA 根证书位置
mkcert -CAROOT
四、生成证书
4.1 单域名证书
mkcert localhost
会在当前目录生成 localhost.pem 和 localhost-key.pem 两个文件。
4.2 多域名证书
mkcert localhost 127.0.0.1 ::1 myapp.local
4.3 通配符证书
mkcert "*.local.dev" local.dev localhost 127.0.0.1
4.4 指定输出文件名
mkcert -key-file key.pem -cert-file cert.pem localhost 127.0.0.1
4.5 生成 PKCS#12 格式
mkcert -pkcs12 localhost 127.0.0.1
生成 .p12 文件,适用于 Java 和 .NET 应用。
五、在 Web 服务器中使用
5.1 Nginx 配置
# 生成证书
mkdir -p /etc/nginx/ssl
mkcert -key-file /etc/nginx/ssl/local-key.pem -cert-file /etc/nginx/ssl/local-cert.pem localhost 127.0.0.1
Nginx 配置文件:
server {
listen 443 ssl;
server_name localhost;
ssl_certificate /etc/nginx/ssl/local-cert.pem;
ssl_certificate_key /etc/nginx/ssl/local-key.pem;
location / {
root /var/www/html;
index index.html;
}
}
5.2 Node.js 开发服务器
mkcert -key-file key.pem -cert-file cert.pem localhost
在 Node.js 中使用:
const https = require('https');
const fs = require('fs');
const options = {
key: fs.readFileSync('key.pem'),
cert: fs.readFileSync('cert.pem')
};
https.createServer(options, (req, res) => {
res.writeHead(200);
res.end('Hello HTTPS!');
}).listen(443);
5.3 Docker 环境
# 在宿主机生成证书
mkcert -key-file ./certs/key.pem -cert-file ./certs/cert.pem localhost 127.0.0.1
# Docker Compose 中挂载
# volumes:
# - ./certs:/etc/ssl/certs/local
5.4 Webpack Dev Server
// webpack.config.js
const fs = require('fs');
module.exports = {
devServer: {
https: {
key: fs.readFileSync('key.pem'),
cert: fs.readFileSync('cert.pem'),
},
host: 'localhost',
port: 8080,
},
};
5.5 Vite 开发服务器
// vite.config.js
import fs from 'fs';
export default {
server: {
https: {
key: fs.readFileSync('key.pem'),
cert: fs.readFileSync('cert.pem'),
},
},
};
六、在远程搬瓦工 VPS 上使用
如果需要在搬瓦工 VPS 上的开发环境使用 mkcert,可以将本地的 CA 根证书复制到 VPS:
# 在本地机器上查看 CA 根证书路径
mkcert -CAROOT
# 复制根证书到 VPS
scp "$(mkcert -CAROOT)/rootCA.pem" root@YOUR_VPS_IP:/usr/local/share/ca-certificates/mkcert-ca.crt
# 在 VPS 上更新证书存储
ssh root@YOUR_VPS_IP "update-ca-certificates"
这样在 VPS 上使用 curl 等命令访问 mkcert 生成的证书时不会出现信任错误。
七、安全注意事项
- 保护 CA 根私钥:
mkcert -CAROOT目录下的rootCA-key.pem是 CA 私钥,如果泄露,攻击者可以生成被你系统信任的任意证书。 - 不要共享 CA 根证书:每台机器应该有自己的本地 CA。
- 仅用于开发:mkcert 生成的证书不应用于生产环境。
- 卸载 CA:如果不再需要,可以卸载本地 CA:
mkcert -uninstall
八、常见问题
Firefox 不信任证书
Firefox 使用独立的证书存储,需要安装 NSS 工具:
apt install libnss3-tools -y
mkcert -install
证书过期
mkcert 生成的证书有效期默认为 2 年 3 个月。过期后重新生成即可:
mkcert localhost 127.0.0.1
总结
mkcert 是本地开发环境中使用 HTTPS 的最佳方案,零配置即可生成受信任的 SSL 证书,彻底消除浏览器安全警告。对于生产环境的 SSL 证书需求,请参考 acme.sh SSL 证书申请教程;对于 Kubernetes 环境,请参考 Cert-Manager K8S SSL 管理教程。选购搬瓦工 VPS 请查看全部方案,使用优惠码 NODESEEK2026 可享受折扣。如有问题可通过搬瓦工官网提交工单。