You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Native WebView安卓端SSL证书不受信问题求助

解决React Native WebView Android端SSL证书信任问题

问题背景

使用react-native-webview加载网页时,为提升安全性移除了AndroidManifest中的android:usesCleartextTraffic="true"配置,随后网页加载失败,报错:SSL error: the certificate authority is not trusted。iOS端移除NSExceptionAllowsInsecureHTTPLoads后功能正常,已尝试两种network_security_config.xml配置(如下)但未解决问题。

尝试过的配置

配置一:

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">mywebsite.com</domain>
    </domain-config>
    <base-config cleartextTrafficPermitted="false" />
</network-security-config>

配置二:

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>  
  <base-config>  
        <trust-anchors>  
            <certificates src="system" /> 
            <certificates src="user" />  
       </trust-anchors>  
  </base-config>  
</network-security-config>

问题原因

报错核心是目标网站的SSL证书不被Android系统信任,可能的场景包括:

  • 网站使用自签名SSL证书
  • 证书链不完整(缺少中间证书)
  • 证书由Android系统未预装的第三方CA颁发

之前的两种配置未命中问题:配置一仅开启明文流量,未处理证书信任逻辑;配置二仅信任系统/用户证书,若目标证书不在此范围内则无效。

解决方案

根据不同证书场景,对应配置如下:

场景1:网站使用自签名证书

  1. 将自签名证书文件(格式为.pem,例如my_cert.pem)复制到android/app/src/main/res/raw/目录(若raw目录不存在则新建)
  2. 修改network_security_config.xml:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config>
        <!-- 替换为你的目标域名 -->
        <domain includeSubdomains="true">mywebsite.com</domain>
        <trust-anchors>
            <!-- 引用添加的自签名证书 -->
            <certificates src="@raw/my_cert" />
            <!-- 保留系统信任证书 -->
            <certificates src="system" />
        </trust-anchors>
    </domain-config>
</network-security-config>

场景2:证书链不完整

  • 优先联系网站运维补全证书链(可先通过PC端Chrome浏览器打开网站,查看证书信息确认链完整性)
  • 若无法修改网站配置,可导出完整证书链为.pem文件,参照场景1的步骤添加到项目中

场景3:证书由非系统信任的CA颁发

  1. 将CA根证书文件(.pem格式)复制到android/app/src/main/res/raw/目录
  2. 修改network_security_config.xml:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <base-config>
        <trust-anchors>
            <!-- 保留系统信任证书 -->
            <certificates src="system" />
            <!-- 引用第三方CA根证书 -->
            <certificates src="@raw/ca_root_cert" />
        </trust-anchors>
    </base-config>
</network-security-config>

额外注意事项

  • 确保AndroidManifest中已正确配置android:networkSecurityConfig="@xml/network_security_config"
  • 证书文件需保持原始.pem格式,不要修改后缀名
  • 测试前清理Android项目缓存(执行./gradlew clean)并重新编译

内容的提问来源于stack exchange,提问作者rishikesh_07

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 17:17:41