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

Flutter中如何为Chopper客户端添加SSL .cert证书

实现步骤
  • 第一步:将tls.cert文件放入项目资源目录,例如assets/certs/路径下,随后在pubspec.yaml中声明该资源,确保运行时可以读取到文件内容:
flutter:
  assets:
    - assets/certs/tls.cert
  • 第二步:加载证书文件,自定义HttpClient的证书校验逻辑,再将自定义客户端注入到ChopperClient中,配置完成后所有通过该ChopperClient发起的请求都会自动应用证书规则:
import 'dart:io';
import 'package:flutter/services.dart';
import 'package:http/io_client.dart';
import 'package:chopper/chopper.dart';

Future<ChopperClient> initChopperClient() async {
  // 读取本地证书文件内容
  final certBytes = await rootBundle.load('assets/certs/tls.cert').then(
    (byteData) => byteData.buffer.asUint8List(),
  );

  // 方案1:通过SecurityContext添加信任证书,适合CA签发证书、根证书校验场景
  final securityContext = SecurityContext()
    ..setTrustedCertificatesBytes(certBytes);
  final httpClient = HttpClient(context: securityContext);

  // 方案2:自定义证书校验逻辑,适合自签名证书场景,只会信任和本地证书一致的请求
  // final httpClient = HttpClient()
  //   ..badCertificateCallback = (X509Certificate cert, String host, int port) {
  //     return cert.pem == String.fromCharCodes(certBytes);
  //   };

  // 包装HttpClient为Chopper支持的Client类型
  final customClient = IOClient(httpClient);

  // 初始化ChopperClient时传入自定义Client
  return ChopperClient(
    baseUrl: Uri.parse('你的后端服务基地址'),
    client: customClient,
    // 其余原有配置:转换器、拦截器等保持不变即可
  );
}
注意事项
  • 生产环境禁止直接在badCertificateCallback中返回true,该操作会跳过所有证书校验,存在严重的安全风险
  • 如果你需要信任多个证书,可将所有证书内容存入集合,在校验时判断返回的证书是否在信任集合内即可

两种配置方案选择建议:
没有特殊自定义校验需求优先选方案1,逻辑更简洁也更符合TLS校验规范;自签名证书、需要针对特定域名做特殊校验的场景选方案2,灵活性更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 17:30:06