如何在flutter中绕过SSL证书验证?

问题描述 投票:0回答:2

如何在flutter中绕过SSL证书验证?

错误:握手异常:客户端握手错误(操作系统错误:CERTIFICATE_VERIFY_FAILED:自签名证书(handshake.cc:345)

flutter dart ssl ssl-certificate flutter-dependencies
2个回答
5
投票

您似乎使用的是自签名证书,操作系统不信任该证书。您可以按照以下步骤将其设置为受信任:

通过以下方式创建一个覆盖

HttpOverrides
的类:

class MyHttpOverrides extends HttpOverrides {
  @override
  HttpClient createHttpClient(SecurityContext? context) {
    return super.createHttpClient(context)
      ..badCertificateCallback = (X509Certificate cert, String host, int port) {
        //add your certificate verification logic here
        return true;
      };
  }
}

然后,在您的 main 方法中,实例化您的类并将其设置为全局 HttpOverride:

HttpOverrides.global = MyHttpOverrides();

如果

badCertificateCallback
返回
true
它将接受所有不良证书;如果返回 false 它将拒绝错误的证书。

链接。 https://stackoverflow.com/a/66268556/11738366


3
投票

您需要配置 HttpService 以与自签名 SSL 本地服务器一起使用。像这样:


import 'dart:io';
import 'dart:convert';
class HttpService {
  Future<dynamic> sendRequestToServer(dynamic model, String                         reqType, bool isTokenHeader, String token) async {
      HttpClient client = new HttpClient();
      client.badCertificateCallback =((X509Certificate cert, String  host, int port) => true);
      HttpClientRequest request = await         client.postUrl(Uri.parse("https://${serverConstants.serverUrl}$reqType"));
      request.headers.set('Content-Type', 'application/json');
      if(isTokenHeader){
         request.headers.set('Authorization', 'Bearer $token');
      }
     request.add(utf8.encode(jsonEncode(model)));
     HttpClientResponse result = await request.close();
     if(result.statusCode == 200) {
        return jsonDecode(await result.transform(utf8.decoder)
        .join());
     } else {
        return null;
     }
   }
}

这里阅读更多内容。

© www.soinside.com 2019 - 2024. All rights reserved.