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

Flutter Android端用inappwebview加载网页报Trust anchor for certification path not found错误如何解决

Flutter InAppWebView安卓端SSL证书验证失败解决方案

错误原因

该报错本质是安卓系统WebView无法验证目标站点的SSL证书链完整性:

I/cr_X509Util(17385): Failed to validate the certificate chain, error: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
E/chromium(17385): [ERROR:ssl_client_socket_impl.cc(981)] handshake failed; returned -1, SSL error code 1, net_error -202

安卓移动端浏览器可以正常打开是因为多数浏览器自带补充根证书库,而应用内WebView默认仅信任系统预装的根证书,二者信任源范围不同;iOS的证书信任策略与安卓存在差异,因此不会触发该报错。

解决方案

临时调试方案(仅开发阶段使用,禁止上线使用,存在严重安全风险)

直接在InAppWebView的回调中跳过证书验证即可加载站点:

InAppWebView(
  initialUrlRequest: URLRequest(url: Uri.parse("https://xyz.website.com")),
  onReceivedServerTrustAuthRequest: (controller, challenge) async {
    return ServerTrustAuthResponse(action: ServerTrustAuthResponseAction.PROCEED);
  },
)

线上合规方案

方案1:修复站点证书配置(最优解)

90%以上的该类问题都是站点SSL证书链配置不完整导致:站点仅部署了域名证书,未部署对应的中间CA证书,安卓系统无法将证书链拼接至信任的系统根证书。

  • 补全站点服务端部署的中间CA证书即可解决问题,无需修改应用代码,全端兼容。

方案2:应用预埋信任证书

如果无法修改站点证书配置,可以将站点的根证书/中间证书预埋到安卓应用中手动验证:

  1. 将站点的CA证书(PEM格式)存入安卓项目的android/app/src/main/res/raw目录,无该目录则手动创建
  2. 配置安卓网络安全配置文件:
    新建android/app/src/main/res/xml/network_security_config.xml,内容如下:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config>
        <domain includeSubdomains="true">xyz.website.com</domain>
        <trust-anchors>
            <certificates src="system" />
            <certificates src="@raw/你的证书文件名(不含后缀)" />
        </trust-anchors>
    </domain-config>
</network-security-config>
  1. 在android/app/src/main/AndroidManifest.xml的application标签添加属性:
<application
    android:networkSecurityConfig="@xml/network_security_config"
    ... 其余原有配置不变
>
  1. 同时配置InAppWebView的证书验证回调,匹配预埋证书后放行:
onReceivedServerTrustAuthRequest: (controller, challenge) async {
  // 自定义校验逻辑,验证当前返回证书与预埋证书一致性
  bool certValid = await customValidateCert(challenge.serverTrust);
  if (certValid) {
    return ServerTrustAuthResponse(action: ServerTrustAuthResponseAction.PROCEED);
  }
  return ServerTrustAuthResponse(action: ServerTrustAuthResponseAction.CANCEL);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 23:45:04