React Native安卓端HTTPS请求失败返回NETWORK_ERROR问题求助
核心原因定位
该问题的本质是RN 0.64版本默认使用的Android网络栈对SSL证书的校验规则比Postman更严格,Postman默认会放松自签名证书、证书链不完整、弱加密算法、域名不匹配等场景的校验规则,因此会出现Postman请求正常但RN端全链路请求HTTPS接口返回NETWORK_ERROR的情况。你测试公共HTTPS接口请求正常,也能佐证问题出在自有服务端证书配置不符合Android系统校验规则,而非RN网络框架本身的问题。
优先排查的3类证书问题
- 证书链不完整:自有HTTPS服务端可能仅部署了站点证书,未附带中间CA证书,浏览器、Postman会自动补全主流的中间证书,但Android网络栈不会,校验直接失败。可通过命令
openssl s_client -connect my.api.url:443 -showcerts检测,若返回的Certificate chain部分只有1段,即可判定为证书链不完整,需要在服务端补上完整的证书链配置。 - 证书使用了不受信任的加密算法:如果证书采用SHA1、MD5这类过时算法签名,或RSA密钥长度不足2048位,Android 7及以上系统会默认不信任该证书,Postman不会拦截这类问题。
- 域名匹配校验失败:如果证书绑定的域名和实际请求的域名不一致,或使用IP地址、未备案的内部域名,RN默认的域名校验会直接失败,Postman可手动跳过该校验因此能正常请求。
验证方案(仅用于测试,生产环境不可用)
可通过临时放宽Android网络安全配置确认是否为证书问题:
- 打开
android/app/src/main/AndroidManifest.xml,在application节点下添加配置:android:networkSecurityConfig="@xml/network_security_config" - 新建
android/app/src/main/res/xml/network_security_config.xml文件,添加如下内容(将my.api.url替换为实际接口域名):
<?xml version="1.0" encoding="utf-8"?> <network-security-config> <domain-config cleartextTrafficPermitted="true"> <domain includeSubdomains="true">my.api.url</domain> <trust-anchors> <certificates src="system" /> <certificates src="user" /> </trust-anchors> </domain-config> </network-security-config>
修改后重新打包运行,若HTTPS请求恢复正常,即可100%确认是证书校验问题,针对性修复服务端证书配置即可。
额外排查点
RN 0.64版本默认依赖的OkHttp版本为3.x,部分旧版本OkHttp对SNI的支持存在缺陷,如果你的服务端是多域名共用同一个IP的HTTPS服务,也可能出现证书获取错误,可手动升级OkHttp依赖到4.x版本修复。
内容的提问来源于stack exchange,提问作者tzi0
相关产品推荐
相关产品推荐

