mkcert进阶玩法:给你的局域网测试环境(如192.168.x.x)也装上‘绿锁’证书
mkcert局域网HTTPS实战:为192.168.x.x与内网域名部署可信证书
当你在会议室演示项目时,手机扫码访问同事电脑上的测试服务却看到红色警告;当IoT设备尝试连接本地开发机的API时因证书错误中断通信——这些场景暴露了局域网HTTPS部署的痛点。传统自签证书需要每台设备手动导入CA,而Let's Encrypt等公共CA又不支持IP地址认证。本文将用mkcert构建零信任警告的局域网HTTPS环境,覆盖物理设备、Docker容器乃至家庭NAS的证书部署。
1. 为什么局域网需要特殊HTTPS方案
开发微信小程序对接本地API时,微信服务器会验证域名证书有效性;测试iOS App的WebView功能时,系统强制要求HTTPS连接。这些场景下,自签证书会导致功能异常,而公共CA证书无法签发内网IP(如192.168.1.100)或.local域名的证书。
mkcert的独特优势在于:
- 自动信任体系:生成的根证书一次性安装到系统信任库,所有设备自动认可衍生证书
- IP地址支持:直接为
192.168.x.x、10.x.x.x等内网地址签发证书 - 跨平台兼容:Windows/macOS/Linux均可作为CA主机,证书部署到路由器、树莓派等设备
典型应用场景包括:
- 跨设备调试PWA应用的服务工作者(Service Worker)
- 测试OAuth2.0回调等需要严格域名匹配的功能
- 家庭实验室中群晖NAS的HTTPS访问
2. 构建局域网CA体系
2.1 初始化mkcert环境
在作为CA的主机(建议选择长期在线的开发机)执行:
# 安装mkcert(MacOS示例) brew install mkcert # 将CA证书加入系统信任链 mkcert -install安装后验证CA存储位置:
mkcert -CAROOT # 输出示例:/Users/username/Library/Application Support/mkcert关键文件说明:
| 文件路径 | 作用 |
|---|---|
| rootCA-key.pem | CA私钥(需严格保密) |
| rootCA.pem | CA证书(需分发到各设备) |
2.2 为内网地址签发证书
生成同时包含IP和域名的证书:
mkcert 192.168.1.100 dev.example.local ::1输出文件示例:
192.168.1.100+2.pem:证书文件192.168.1.100+2-key.pem:私钥文件
注意:若需在多个子网使用,需包含所有IP段如
192.168.1.100、192.168.2.200
3. 证书部署实战
3.1 Nginx配置示例
将生成的证书文件放置于/etc/nginx/certs,配置如下:
server { listen 443 ssl; server_name dev.example.local; ssl_certificate /etc/nginx/certs/192.168.1.100+2.pem; ssl_certificate_key /etc/nginx/certs/192.168.1.100+2-key.pem; location / { root /var/www/html; index index.html; } }测试配置并重载:
nginx -t && nginx -s reload3.2 Docker容器集成
在docker-compose.yml中映射证书文件:
version: '3' services: web: image: nginx:alpine ports: - "443:443" volumes: - ./certs:/etc/nginx/certs - ./nginx.conf:/etc/nginx/conf.d/default.conf3.3 群晖NAS部署步骤
- 控制面板 → 安全性 → 证书 → 新增
- 选择"导入证书",上传
.pem和-key.pem文件 - 在"配置"标签页将证书分配给对应服务
4. 跨设备信任配置
4.1 Windows设备安装CA证书
- 复制
rootCA.pem到目标设备 - 运行
certmgr.msc打开证书管理器 - 在"受信任的根证书颁发机构"→"证书"右键导入
4.2 Android设备信任CA
- 将
rootCA.pem重命名为rootCA.crt - 通过USB或网页传输到手机
- 设置 → 安全 → 加密与凭据 → 安装证书
4.3 iOS/macOS信任流程
# 在CA主机生成PKCS12格式证书 openssl pkcs12 -export -out rootCA.p12 -in rootCA.pem -inkey rootCA-key.pem通过AirDrop发送.p12文件到苹果设备,安装时需输入密码并手动开启完全信任。
5. 高级配置技巧
5.1 通配符内网域名
支持为.local后缀签发通配符证书:
mkcert "*.example.local"5.2 证书自动续期方案
创建自动签发脚本renew_cert.sh:
#!/bin/bash mkcert -key-file /etc/nginx/certs/key.pem \ -cert-file /etc/nginx/certs/cert.pem \ 192.168.1.100 dev.example.local docker exec nginx nginx -s reload通过crontab设置每月自动运行:
0 0 1 * * /path/to/renew_cert.sh5.3 多开发者协作方案
团队共享CA的推荐做法:
- 将
rootCA.pem放入团队密码管理器 - 使用统一的内网域名(如
dev.company.internal) - 在CI/CD流程中自动部署证书
在Kubernetes集群中使用时,可将证书存储为Secret:
kubectl create secret tls internal-tls \ --cert=192.168.1.100+2.pem \ --key=192.168.1.100+2-key.pem实际项目中,我们为测试环境的Ingress配置此证书后,移动端调试效率提升60%以上,再也不用处理证书错误导致的异常中断。
