HarmonyOS Https请求如何通自定义证书去请求访问?

在其他平台开发Https请求中通过加载一个 X.509 证书,并将其添加到一个 KeyStore(密钥库)中。具体来说,通过是读取一个存储在应用资源中(raw)的证书文件,并将该证书添加到 KeyStore 中,以便用于 SSL/TLS 连接的信任管理。

根据以上的描述,请问在HarmonyOS研发过程中我该如何处理,有没有最佳实践的代码?

阅读 401
1 个回答

关于该问题解决方案参考如下两种方式设置:

  1. 可以将证书放入根证书同级目录下如"/etc/ssl/certs/cacert1.pem",将该路径设置到capath参数; 参考链接:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-http-V5\#httprequestoptions
  2. 从代码层面设置写入证书文件,首先将证书放入项目rawfile资源目录下,然后将代码生成写入的filePath参数设置到请求中caPath,demo可参考如下:
requestHttp(url: string): Promise<string> {
  getContext(this).area = 0;
  let context: Context = getContext(this);
  const keyPemConent = context.resourceManager.getRawFileContentSync('_.cnfic.com.cn.pem');
  let filesDir: string = context.filesDir;
  let filePath = filesDir + '/testCer2.pem';
  let file = fs.openSync(filePath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
  fs.writeSync(file.fd, keyPemConent.buffer);
  fs.fsyncSync(file.fd);
  fs.closeSync(file);
  let str = '';
  return new Promise((resolve, reject) => {
  let httpRequest = http.createHttp();
  httpRequest.request(url, {
  method: http.RequestMethod.GET,
  caPath: filePath,
  connectTimeout: 60000,
  readTimeout: 60000,
}, (err: BusinessError, data) => {
  console.info('1---- url:' + JSON.stringify(url));
  if (!err) {
    // data.result为HTTP响应内容,可根据业务需要进行解析
    console.info('1---- arrResult:' + JSON.stringify(data.result));
    console.info('1---- code:' + JSON.stringify(data.responseCode));
    console.info('1---- type:' + JSON.stringify(data.resultType));
    console.info('1---- header:' + JSON.stringify(data.header));
    console.info('1---- cookies:' + JSON.stringify(data.cookies));
    console.info('1 ---------------------------------------------');
    httpRequest.destroy();
  } else {
    console.info('1---- error:' + JSON.stringify(err));
    console.info('1 ---------------------------------------------');
    httpRequest.destroy();
  }
});
});
}
logo
HarmonyOS
子站问答
访问
宣传栏