如何在Flutter上禁用SSL Pinning?

sh7euo9m  于 2023-05-29  发布在  Flutter
关注(0)|答案(3)|浏览(238)

我们正在使用Flutter进行应用程序开发。我们的安全测试人员说,我们需要在Flutter代码中禁用SSL Pinning,以便他们可以运行一些测试。我们做不到我们使用Dio包进行HTTP请求。如何在Flutter上禁用SSL Pinning?

vulvrdjw

vulvrdjw1#

我也遇到过类似的问题。解决办法很简单。http数据包会自动阻止网络侦听。
要修复此问题并重新提交进行渗透测试,请对main. dart文件进行以下更改:

class MyHttpOverrides extends HttpOverrides {
  @override
  HttpClient createHttpClient(SecurityContext context) {
    if (Platform.isAndroid) {
      return super.createHttpClient(context)..badCertificateCallback = (X509Certificate cert, String host, int port) => true;
    }

    return super.createHttpClient(context)
      ..findProxy = (uri) {
        return "PROXY localhost:8080";
      }
      ..badCertificateCallback = (X509Certificate cert, String host, int port) => true;
  }
}

然后在**main()**方法中添加这一行:

HttpOverrides.global = MyHttpOverrides();
rjee0c15

rjee0c152#

编辑:
SSL固定不是默认行为。因此,如果尚未启用,则不需要禁用它。

nzk0hqpo

nzk0hqpo3#

SSL Pinning不是Flutter的默认行为,但Dio库在使用代理服务器拦截API调用时拒绝我们安装的自签名证书。Dio库提供了一个回调badCertificateCallback当它发现一些自签名证书之间的连接。

(dio.httpClientAdapter as DefaultHttpClientAdapter).onHttpClientCreate =
    (client) {
      client.findProxy = (uri) => "PROXY 192.168.1.10:8888;";
      client.badCertificateCallback =
          (X509Certificate cert, String host, int port) => true;
    };

badCertificateCallback系统将接受自签名证书并调用服务器,您将能够拦截代理服务器中的调用,但如果您返回false,它将拒绝证书,API调用将无法进行,您将无法调用服务器。默认为false。

client.findProxy = (uri) => "PROXY 192.168.1.10:8888;"; //here you need to write your own proxy local address and port number

相关问题