HarmonyOS 鸿蒙Next Https请求如何通自定义证书去请求访问

发布于 1周前 作者 gougou168 来自 鸿蒙OS

HarmonyOS 鸿蒙Next Https请求如何通自定义证书去请求访问

在安卓开发Https请求中通过加载一个 X.509 证书,并将其添加到一个 KeyStore(密钥库)中。具体来说,通过是读取一个存储在应用资源中(raw)的证书文件,并将该证书添加到 KeyStore 中,以便用于 SSL/TLS 连接的信任管理。  根据以上的描述,请问在鸿蒙研发过程中我该如何处理,有没有最佳实践的代码?  二、安卓示例代码如下:

// 获取证书类型 
CertificateFactory cf = CertificateFactory.getInstance(“X.509”);
// 获取raw下的证书文件
InputStream caInput = new BufferedInputStream(context.getResources().openRawResource(R.raw.client));
Certificate ca; try {
// 生成证书
ca = cf.generateCertificate(caInput); }
finally { caInput.close(); }  
Create a KeyStore containing our trusted CAs String keyStoreType = KeyStore.getDefaultType();
KeyStore keyStore = KeyStore.getInstance(keyStoreType);
keyStore.load(null, null); keyStore.setCertificateEntry(“ca”, ca);


更多关于HarmonyOS 鸿蒙Next Https请求如何通自定义证书去请求访问的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复
自定义证书可以通过capath属性设置,参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-http-V5#httprequestoptions

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

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();
          } 
    }) 
  }); 
} 

更多关于HarmonyOS 鸿蒙Next Https请求如何通自定义证书去请求访问的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙系统中,进行HTTPS请求并使用自定义证书进行访问,可以通过以下步骤实现:

  1. 加载自定义证书:首先,需要将自定义证书文件(如.pem或.crt格式)加载到应用程序中。这通常涉及将证书文件作为资源打包到APK中,或者在运行时从外部存储读取。

  2. 配置HTTPS客户端:使用HarmonyOS提供的网络库(如ArkUI中的fetch API或其他网络库),配置HTTPS客户端以使用自定义证书。这通常涉及设置SSL/TLS上下文,将自定义证书添加到受信任的证书链中。

  3. 发起HTTPS请求:配置完成后,使用HTTPS客户端发起请求。确保请求URL使用HTTPS协议,并验证请求是否成功建立连接且数据能够正确传输。

  4. 处理证书验证:在请求过程中,系统将验证服务器证书是否与自定义证书匹配。如果验证失败,可能需要调整证书配置或检查服务器证书的有效性。

示例代码(伪代码,具体实现需参考HarmonyOS SDK文档):

// 加载自定义证书
CustomCertificate cert = loadCertificateFromFile("path/to/custom_cert.pem");

// 配置HTTPS客户端
HttpClient client = HttpClient.newBuilder()
    .setSSLContext(createSSLContextWithCustomCert(cert))
    .build();

// 发起HTTPS请求
HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://example.com"))
    .build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部