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

Flutter调用本地ASP.NET Core后端遇证书验证失败问题求助

解决Flutter调用本地ASP.NET Core后端的CERTIFICATE_VERIFY_FAILED错误

问题背景

开发Flutter应用时,向本地ASP.NET Core后端发起HTTP API调用,在Android Studio模拟器中遇到以下错误:

Handshake Exception: Handshake error in client (OS Error: CERTIFICATE_VERIFY_FAILED: unable to get local issuer certificate (handshake.cc:393))

Flutter请求代码:

final url = Uri.parse('http://10.0.2.2:7095/api/UserAccount/login');
final response = await http.post(
 url,
 headers: {'Content-Type': 'application/json'},
 body: jsonEncode({"email": "test@example.com", "password": "password"}),
);

已配置HttpOverrides绕过SSL验证:

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());
}

ASP.NET Core后端launchSettings.json配置:

"applicationUrl": "http://localhost:7095 ;https://localhost:5000",

已尝试验证后端可通过浏览器访问、使用10.0.2.2访问、添加HttpOverrides、关闭防火墙,但问题依旧。

解决方案

1. 检查后端是否强制HTTPS重定向

ASP.NET Core默认会启用HTTPS重定向,即使你请求的是HTTP地址,也会被自动跳转到HTTPS,导致证书验证失败:

  • 打开后端项目的Program.cs,查找app.UseHttpsRedirection();代码,暂时注释掉(仅开发环境)后重启后端服务。
  • 或者在appsettings.json中添加配置关闭HTTPS重定向:
    "HttpsRedirection": {
      "Enabled": false
    }
    

2. 确保HttpOverrides正确生效

若初始化顺序或其他代码导致HttpOverrides未生效,可直接创建自定义HttpClient:

final client = HttpClient()
  ..badCertificateCallback = (X509Certificate cert, String host, int port) => true;
final request = await client.postUrl(Uri.parse('http://10.0.2.2:7095/api/UserAccount/login'));
request.headers.set('Content-Type', 'application/json');
request.write(jsonEncode({"email": "test@example.com", "password": "password"}));
final response = await request.close();
final responseBody = await response.transform(utf8.decoder).join();

3. 验证模拟器网络连通性

在Android模拟器的内置浏览器中访问http://10.0.2.2:7095,确认能正常打开后端页面:

  • 若无法访问,用netstat -ano | findstr :7095命令验证后端是否在7095端口运行。
  • 修改launchSettings.json的applicationUrl为http://0.0.0.0:7095;https://localhost:5000,让后端监听所有网络接口。

4. 开发环境下信任本地HTTPS证书(推荐)

如需使用HTTPS,不要直接绕过验证,而是让Flutter信任本地开发证书:

  1. 导出ASP.NET Core开发证书:
    命令行执行dotnet dev-certs https --export-path ~/localhost.pfx --password yourpassword(替换路径和密码)。
  2. 将导出的.pfx文件复制到Flutter项目assets目录,并在pubspec.yaml声明:
    assets:
      - assets/localhost.pfx
    
  3. 在Flutter中加载证书并配置HttpClient:
    final ByteData data = await rootBundle.load('assets/localhost.pfx');
    final SecurityContext context = SecurityContext.defaultContext;
    context.setTrustedCertificatesBytes(data.buffer.asUint8List(), password: 'yourpassword');
    final client = HttpClient(context: context);
    // 后续使用该client发起请求
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 03:02:27