You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Flutter WebView加载HTTPS链接时出现SSL握手失败错误

解决Flutter WebView加载HTTPS链接时的SSL握手失败问题

你遇到的E/chromium(13842): [ERROR:ssl_client_socket_impl.cc(983)] handshake failed; returned -1, SSL error code 1, net_error -202错误,本质是SSL/TLS握手过程中证书验证不通过导致的,下面是几个实用的排查和解决方法:

  • 先确认服务器证书的合法性
    首先用普通浏览器打开你的HTTPS链接,点击地址栏的锁图标查看证书详情:

    • 检查证书是否由正规的CA机构颁发,不是自签名证书;
    • 确认证书是否在有效期内,域名是否和访问的地址完全匹配;
      如果是自签名证书,这就是问题根源——默认情况下WebView会拒绝信任这类未被系统认可的证书。
  • 测试环境下处理自签名证书(生产环境禁用!)
    如果是测试环境使用自签名证书,你可以临时配置WebView忽略SSL验证,但绝对不能在生产应用中这么做,会带来严重的安全风险。
    webview_flutter包为例,可以通过证书错误回调来跳过验证:

    WebView(
      initialUrl: "你的HTTPS链接",
      onWebViewCreated: (WebViewController controller) async {
        if (Platform.isAndroid) {
          final sslManager = AndroidWebViewSslManager(controller);
          sslManager.setSslErrorHandler((error, handler) {
            // 忽略SSL错误,继续加载页面
            handler.proceed();
          });
        }
      },
      // 其他必要配置...
    )
    

    注意:不同版本的webview_flutterAPI可能略有差异,记得对照你使用的版本调整代码。

  • 检查设备系统时间
    这个容易被忽略:如果设备的系统时间和实际时间偏差过大(比如差了几个月甚至几年),会导致证书的有效期验证失败。把设备时间调整到当前正确时间后再尝试加载链接。

  • 验证WebView的TLS版本兼容性
    部分旧版本的Android系统WebView可能不支持服务器使用的高版本TLS协议(比如TLS 1.3),可以检查服务器的TLS配置,确保兼容目标系统版本,或者在应用中配置WebView启用对应TLS版本的支持。

重要提醒:生产环境必须使用由正规CA颁发的有效SSL证书,任何忽略SSL验证的操作都会让用户的通信面临被窃听、篡改的风险,绝对不可取。

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

火山引擎 最新活动