HarmonyOS 怎么安装证书、抓包?

如题:HarmonyOS 怎么安装证书、抓包?

阅读 405
1 个回答

当前网络模块已支持适配Charles工具抓包,配置方式如下:

1、导出证书点击 Help—\>SSL Proxying—\>Save Charles Root Certificate。导入证书到手机执行命令参考如下:

hdc file send charles.pem(pc上证书路径) /storage/media/100/local/files/Download(手机指定路径)

2、连接手机后执行命令启动证书安装界面:

hdc shell aa start -a MainAbility -b com.ohos.certmanager 

3、选择从存储设备安装,选择指定pem证书。

4、安装Charles证书到系统可信目录,点击Help—\>SSL Proxying—\>Install Charles Root Certificate—\>安装证书—\>选择证书存储路径为受信任的根证书颁发机构。

5、设置代理,点击 Proxy—\>SSL Proxy Settings—\>在Include添加 : 和 *:443 2)点击Proxy—\>Proxy Settings—\>勾选Enable transparent HTTP proxying。

6、Wifi代理设置,将手机与电脑同一局域网下连接,手机连接WiFi时,点击代理设置为手动,修改设置代理IP,端口为Charles监听的端口,默认为8888可在上一步Proxy Settings中查看和修改。

7、应用抓取http包,App开发时HTTP请求HttpRequestOptions参数设置,可参考文档设置usingProxy为true,表示使用HTTP代理(该字段默认为false 不使用代理),设置caPath(可根据环境使用设置,默认使用系统预设CA)。

http参数设置可参考:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-http-V5

工具配置可参考博客:https://juejin.cn/post/6844904182588112904

import { fileIo, picker } from '@kit.CoreFileKit';
import { BusinessError } from '@kit.BasicServicesKit';
import { http } from '@kit.NetworkKit'

@Entry
@Component
struct Index {
  @State uri: string = "";

  installCer() {
    const documentSaveOptions = new picker.DocumentSaveOptions() // 创建文件管理器选项实例
    const documentViewPicker = new picker.DocumentViewPicker() // 创建文件选择器实例
    documentViewPicker.save(documentSaveOptions).then((documentSaveResult: Array<string>) => {
      this.uri = documentSaveResult[0];
      console.info('documentViewPicker.save to file succeed and uris are:' + this.uri);
    }).catch((err: BusinessError) => {
      console.error(`Invoke documentViewPicker.save failed, code is ${err.code}, message is ${err.message}`);
    })
  }

  requestBaidu() {
    let req = http.createHttp();
    req.on("headersReceive", (h) => {
      console.info('header: ' + JSON.stringify(h));
    })
    req.request("https://www.huawei.com/");
  }

  build() {
    Column() {
      // 调用 picker 创建证书文件
      Button('安装证书')
        .onClick(() => {
          this.installCer();
        })
      // 将本地(resource/rawfile/test.pem)证书写入手机 内部存储/download 中
      Button('写入证书').onClick(async () => {
        let file = fileIo.openSync(this.uri, fileIo.OpenMode.READ_WRITE);
        let buf: Uint8Array = await getContext(this)
          .resourceManager
          .getRawFileContent('test.pem')
        // uint8buff 转 arraybuf
        let buffer: ArrayBuffer = buf.buffer.slice(0);
        try {
          let writeLen: number = fileIo.writeSync(file.fd, buffer);
        } catch (e) {
          console.info("tag " + JSON.stringify(e))
        }
        fileIo.closeSync(file);
      })
      // 测试抓包
      Button('测试抓包').onClick(() => {
        this.requestBaidu();
      })
    }
  }
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
logo
HarmonyOS
子站问答
访问
宣传栏