开发时有时需要验证 HTTPS、混合内容或与协议有关的行为。mkcert 可以生成由本地开发 CA 签发的证书;它用于开发环境,不替代公网网站证书。

安装工具与本地 CA

按 mkcert 官方安装说明安装适合操作系统的版本,然后运行:

mkcert -install

这一步创建本地 CA 并安装信任。工具是否能配置某个浏览器的信任,还取决于系统和浏览器环境。

为实际访问的地址生成证书

在专门存放开发证书的目录运行:

mkcert -cert-file localhost.pem -key-file localhost-key.pem localhost 127.0.0.1 ::1

证书包含列出的主机名与 IP。若后来改用局域网 IP 或自定义域名访问,需要让该地址也包含在证书中。

证书并不会启动 HTTPS 服务。生成文件之后,还需要让服务器使用证书和私钥。

用 Nginx 代理本地预览服务

以下配置适用于本机预览服务已运行在 127.0.0.1:5520 的情况。证书路径需改为实际路径,配置块位于 http 上下文内:

server {
listen 443 ssl;
server_name localhost;

ssl_certificate F:/dev-certs/localhost.pem;
ssl_certificate_key F:/dev-certs/localhost-key.pem;

location / {
proxy_pass http://127.0.0.1:5520;
proxy_set_header Host $host;
}
}

检查配置并启动或重新加载 Nginx,再访问 https://localhost/。443 端口若被其他程序占用,需要先解决冲突或选择其他端口。

跨设备访问为什么仍会警告

另一台设备默认不信任当前电脑创建的本地 CA。要测试局域网 HTTPS,需要证书包含访问地址,并在测试设备上安装信任用的根证书。

可以通过 mkcert -CAROOT 找到 CA 目录。用于信任的是 rootCA.pem;rootCA-key.pem 是根私钥,不应发送给其他设备或提交到仓库。站点私钥也应放在公开网站目录之外。

常见排错入口

  • 名称不匹配:检查地址栏中的域名或 IP 是否在证书中。
  • 不受信任:确认目标设备及浏览器信任了正确的本地 CA。
  • 502:确认上游预览服务已启动,代理端口正确。
  • 混合内容:检查 HTTPS 页面是否仍请求 HTTP 资源。

本笔记提供独立开发环境的操作示例,没有修改当前预览服务或线上证书。

参考资料

选题参考:Sakura Yumine:本地 https 环境解决方案。本文按本地 Hexo 预览场景重新编写。

技术依据:mkcert 官方说明、Nginx HTTPS 配置。