Flutter不支持Charles抓包?

實(shí)際問(wèn)題場(chǎng)景描述

使用dio框架發(fā)起的網(wǎng)絡(luò)請(qǐng)求,手機(jī)上都配置好一切后,Charles卻沒(méi)法抓到包。

問(wèn)題分析

需要知識(shí)儲(chǔ)備:https的ssl加密實(shí)現(xiàn)、charles抓https包的原理

問(wèn)題原因

  1. Flutter應(yīng)用中常用的HTTP客戶端庫(kù)(如Dio或http)是獨(dú)立使用Dart語(yǔ)言的HTTP實(shí)現(xiàn),未直接使用系統(tǒng)級(jí)的網(wǎng)絡(luò)堆棧,所以它們不會(huì)自動(dòng)繼承系統(tǒng)代理配置,因此系統(tǒng)上的代理配置無(wú)法生效。
  2. 在Dart/Flutter中,也就是框架層面,默認(rèn)的HTTP客戶端不信任自簽名證書,網(wǎng)絡(luò)庫(kù)(如Dio或http)層繼承了這個(gè)默認(rèn)配置。

問(wèn)題解決

需在dart代碼內(nèi),手動(dòng)指定代理ip和端口。(可以自己寫一個(gè)簡(jiǎn)單的小頁(yè)面,來(lái)配置代理,指定代理端口和ip)
如果使用的是dio庫(kù),如下

dio!.httpClientAdapter = IOHttpClientAdapter(
  createHttpClient: () {
    final client =
        HttpClient(context: SecurityContext(withTrustedRoots: false));
    client.findProxy = (uri) {
      return 'PROXY $proxyIp:$proxyPort'; // proxyIp: 代理ip,proxyPort:代理端口
    };
    client.badCertificateCallback =
        (X509Certificate cert, String host, int port) => true; // 允許自簽名證書
    return client;
  },
);

如果使用的是Http庫(kù),如下

HttpClient client = HttpClient();
client.findProxy = (uri) {
  return "PROXY $proxyIp:$proxyPort"; // proxyIp: 代理ip,proxyPort:代理端口
};
client.badCertificateCallback = (X509Certificate cert, String host, int port) => true;  // // 允許自簽名證書

提問(wèn)

為什么Flutter的dio不支持類似安卓/iOS原生應(yīng)用一樣直接被抓包?
  • SSL Pinning:Flutter 默認(rèn)情況下沒(méi)有啟用 SSL Pinning,但它會(huì)對(duì) SSL 證書進(jìn)行驗(yàn)證。抓包工具通常通過(guò)代理和自簽名證書來(lái)解密 HTTPS 流量,因此需要忽略 SSL 證書錯(cuò)誤才能進(jìn)行抓包。
  • 網(wǎng)絡(luò)庫(kù)的行為:Flutter 使用 dart:io 庫(kù)進(jìn)行網(wǎng)絡(luò)請(qǐng)求,該庫(kù)在進(jìn)行 HTTPS 請(qǐng)求時(shí)會(huì)驗(yàn)證服務(wù)器的 SSL 證書。
  • 中間人攻擊防護(hù):忽略 SSL 證書錯(cuò)誤可能會(huì)讓應(yīng)用暴露于中間人攻擊,因此只應(yīng)在開(kāi)發(fā)和調(diào)試時(shí)使用,在生產(chǎn)環(huán)境中絕對(duì)不要忽略 SSL 證書錯(cuò)誤。
  • 在Flutter應(yīng)用中不配置代理,網(wǎng)絡(luò)請(qǐng)求默認(rèn)不會(huì)走系統(tǒng)代理,這是因?yàn)镕lutter的網(wǎng)絡(luò)請(qǐng)求使用了獨(dú)立的網(wǎng)絡(luò)庫(kù)(如dart:io),而不是依賴操作系統(tǒng)的網(wǎng)絡(luò)堆棧
總結(jié):
  • Flutter對(duì)SSL證書的驗(yàn)證更嚴(yán)格,而charles使用的不是受信任機(jī)構(gòu)頒發(fā)的證書,所以在驗(yàn)證SSL證書的時(shí)候報(bào)錯(cuò)了
  • 對(duì)比iOS來(lái)說(shuō),AFNetworking會(huì)依賴操作系統(tǒng)提供的信任機(jī)制來(lái)驗(yàn)證 HTTPS 請(qǐng)求的安全性,而flutter沒(méi)有依賴系統(tǒng)信任機(jī)制。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容