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

Flutter中如何处理SSL证书过期导致的客户端握手错误?

Flutter中解决SSL证书过期导致的HandshakeException及空安全下的证书绕过方案

问题分析

你遇到的HandshakeException确实是服务器SSL证书过期引发的客户端证书验证失败问题。尝试通过HttpOverrides绕过验证时,因Dart空安全规则,出现了函数类型不匹配错误——badCertificateCallback是可空类型的回调,而你赋值的是一个非可空函数。

临时解决方案(仅用于测试,禁止生产环境)

修复空安全下的类型匹配问题,正确的HttpOverrides实现如下:

import 'dart:io';

class MyHttpOverrides extends HttpOverrides {
  @override
  HttpClient createHttpClient(SecurityContext? context) {
    return super.createHttpClient(context)
      ..badCertificateCallback = (X509Certificate cert, String host, int port) => true;
  }
}

然后在main函数中启用全局配置:

void main() {
  HttpOverrides.global = MyHttpOverrides();
  runApp(const YourApp());
}

如果仍出现类型错误,可显式转换回调类型:

class MyHttpOverrides extends HttpOverrides {
  @override
  HttpClient createHttpClient(SecurityContext? context) {
    return super.createHttpClient(context)
      ..badCertificateCallback = ((X509Certificate cert, String host, int port) => true) as HttpClientBadCertificateCallback?;
  }
}

推荐的生产环境解决方案

绕过证书验证会完全丧失SSL的安全防护能力,存在中间人攻击风险,绝对不能用于生产环境。正确的处理方式是:

  • 联系服务器运维人员,更新过期的SSL证书,确保证书由可信CA签发
  • 证书更新完成后,移除所有绕过证书验证的代码,恢复正常HTTPS请求流程

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 05:25:21