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

调试模式下如何为CronetClient和CupertinoClient设置badCertificateCallback?

问题

之前使用Dart http包的常规http.Client时,通过自定义HttpOverrides实现了调试模式下信任任意证书:

class BadCertificateHttpOverrides extends io.HttpOverrides {
  @override
  io.HttpClient createHttpClient(io.SecurityContext? context) {
    bool callback(io.X509Certificate cert, String host, int port) => true;

    return super.createHttpClient(context)..badCertificateCallback = callback;
  }
}
if (kDebugMode) {
  // Override to allow arbitrary certificates in debug mode
  io.HttpOverrides.global = BadCertificateHttpOverrides();
}

但切换为http包文档推荐的Android端CronetClient和iOS端CupertinoClient后,上述方法失效,请问有没有类似方式让这两个客户端在调试模式下信任任意证书?


解决方案

Android(CronetClient)

CronetClient基于Chrome网络栈,需通过CronetEngine的配置项关闭证书验证。调试模式下初始化客户端时,直接在引擎配置中开启相关开关:

import 'package:cronet_http/cronet_http.dart';
import 'dart:io' show kDebugMode;

CronetClient createDebugCronetClient() {
  final cronetEngine = CronetEngine.build(
    disableCertificateVerification: kDebugMode,
    enablePublicKeyPinningBypassForLocalTrustAnchors: kDebugMode,
  );
  return CronetClient.fromCronetEngine(cronetEngine);
}

调试环境下调用该方法创建客户端,即可绕过证书校验。

iOS(CupertinoClient)

CupertinoClient基于NSURLSession,需通过URLSessionConfiguration调整证书信任策略:

import 'package:cupertino_http/cupertino_http.dart';
import 'dart:io' show kDebugMode;

CupertinoClient createDebugCupertinoClient() {
  final config = URLSessionConfiguration.defaultSessionConfiguration()
    ..allowsInvalidCertificates = kDebugMode
    ..validatesDomainName = !kDebugMode;
  return CupertinoClient.fromSessionConfiguration(config);
}

调试模式下使用上述客户端,即可忽略证书有效性验证。

关键注意事项

  • 务必仅在调试阶段启用上述配置,正式发布版本必须关闭所有证书校验绕过逻辑,避免安全漏洞。
  • 可配合编译条件或环境变量,确保生产代码不会包含调试相关的证书配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 19:42:18