Windows系统Expo运行Android模拟器报自签名证书链错误求助
问题诱因
报错核心是Expo CLI拉取对应SDK版本的app.json校验schema时触发了SSL证书校验失败,和项目源码无关。
Node.js运行时默认使用内置的CA证书列表做HTTPS校验,不会自动信任Windows系统证书库中导入的自签名证书,当网络链路存在以下情况时就会触发self signed certificate in certificate chain报错:
- 本地开启了Fiddler、Charles、Reqable等抓包工具,这类工具会生成自签名证书替换HTTPS站点证书实现流量嗅探
- 开启了全局网络代理,代理节点对HTTPS流量做了中间人替换
- 处于公司、校园等受管内网环境,网络网关会对HTTPS流量做证书替换实现内容审计
Web端可正常运行是因为浏览器直接复用系统的证书信任规则,且Expo Web启动流程不会触发schema远程拉取校验的逻辑,不会触发该报错;Android模拟器加载失败是因为CLI端的证书校验失败阻塞了配置校验流程,导致bundle无法正常推送到模拟器。
你之前尝试的依赖重装、缓存清理、模拟器数据重置操作都没有触及Node.js SSL校验的核心逻辑,所以无法解决问题。
修复方案
按操作成本从低到高排序:
- 临时生效方案(推荐本地开发使用)
启动Expo项目前,在当前终端窗口配置Node.js环境变量跳过SSL校验:
若使用CMD命令行,执行:
若使用PowerShell,执行:set NODE_TLS_REJECT_UNAUTHORIZED=0
配置完成后在同一个终端窗口执行$env:NODE_TLS_REJECT_UNAUTHORIZED=0expo start -c清除缓存启动服务,重新连接Android模拟器即可正常加载。该配置仅对当前终端窗口生效,不会修改全局系统配置。 - 长期生效方案
打开Windows系统环境变量设置面板,新建用户级环境变量:- 变量名:
NODE_TLS_REJECT_UNAUTHORIZED - 变量值:
0
保存后重启所有终端窗口,后续启动Expo服务会自动加载该配置,无需重复设置。
- 变量名:
- 保留SSL校验的安全方案
先退出所有抓包工具、关闭全局代理,切换到无证书拦截的网络(比如手机热点)后重试启动;如果必须在内网环境开发,可以向网络管理员获取内网的自签名根证书文件,新增环境变量NODE_EXTRA_CA_CERTS,值填写根证书文件的本地绝对路径,让Node.js信任该自签名证书即可。 - 额外补全操作
手动删除C:\Users\<你的实际用户名>\AppData\Local\Expo目录下所有schema-*.json格式的文件,避免已损坏的本地缓存schema文件触发校验错误。
内容的提问来源于stack exchange,提问作者server_unknown
相关产品推荐
相关产品推荐

