升级Flutter2.5/Dart2.14后POST请求证书验证失败及重写方法报错
问题原因
Dart 2.12及以上版本全面推行空安全规范,HttpOverrides类的createHttpClient方法入参SecurityContext被调整为可空类型SecurityContext?,原有代码中使用不可空类型的入参不符合父类方法定义,导致重载失效,自定义的证书校验逻辑没有生效,最终触发CERTIFICATE_VERIFY_FAILED错误。
修复方案
仅需要调整createHttpClient方法的入参类型为可空类型即可,修改后的完整代码如下:
class MyHttpOverrides extends HttpOverrides{ @override HttpClient createHttpClient(SecurityContext? context){ return super.createHttpClient(context) ..badCertificateCallback = (X509Certificate cert, String host, int port)=> true; } } void main(){ HttpOverrides.global = MyHttpOverrides(); runApp(MyApp()); }
注意事项
- 上述代码中
badCertificateCallback直接返回true的逻辑会绕过所有HTTPS证书校验,仅可用于测试环境调试,禁止在生产环境使用,否则会存在严重的网络安全风险。 - 如果生产环境需要处理自签名证书的场景,建议在回调中添加证书指纹校验逻辑,仅放行符合预期的合法自签名证书。
内容的提问来源于stack exchange,提问作者Brice Canti
相关产品推荐
相关产品推荐

