我们正在使用Flutter进行应用程序开发。我们的安全测试人员说,我们需要在Flutter代码中禁用SSL Pinning,以便他们可以运行一些测试。我们做不到我们使用Dio包进行HTTP请求。如何在Flutter上禁用SSL Pinning?
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();
rjee0c152#
编辑:SSL固定不是默认行为。因此,如果尚未启用,则不需要禁用它。
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
3条答案
按热度按时间vulvrdjw1#
我也遇到过类似的问题。解决办法很简单。http数据包会自动阻止网络侦听。
要修复此问题并重新提交进行渗透测试,请对main. dart文件进行以下更改:
然后在**main()**方法中添加这一行:
rjee0c152#
编辑:
SSL固定不是默认行为。因此,如果尚未启用,则不需要禁用它。
nzk0hqpo3#
SSL Pinning不是Flutter的默认行为,但Dio库在使用代理服务器拦截API调用时拒绝我们安装的自签名证书。Dio库提供了一个回调badCertificateCallback当它发现一些自签名证书之间的连接。
badCertificateCallback系统将接受自签名证书并调用服务器,您将能够拦截代理服务器中的调用,但如果您返回false,它将拒绝证书,API调用将无法进行,您将无法调用服务器。默认为false。