HarmonyOS 鸿蒙Next 如何在DefaultHttpClient 中实现对服务端SSL证书进行校验(公钥比对)?

发布于 1周前 作者 songsunli 最后一次编辑是 5天前 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 如何在DefaultHttpClient 中实现对服务端SSL证书进行校验(公钥比对)?

import {
  DefaultHttpClient,
  RequestOptions,
  CancelRequestCallback,
  HttpResponse,
  RequestInterceptor,
  ResponseInterceptor
} from '@rnoh/react-native-openharmony/src/main/ets/HttpClient/ts';

export default class SSLHttpClient extends DefaultHttpClient {
  constructor({ baseRequestOptions, responseInterceptors, requestInterceptors }: {
    baseRequestOptions?: RequestOptions
    responseInterceptors?: ResponseInterceptor[],
    requestInterceptors?: RequestInterceptor[],
  }={}) {
    let _baseRequestOptions = baseRequestOptions ?? {}
      _baseRequestOptions.clientCert = clientCert // 这里配置了客户端证书,代码就不列出来了。
    super({baseRequestOptions: _baseRequestOptions, responseInterceptors, requestInterceptors})
  }
  
  sendRequest(url: string, requestOptions: RequestOptions): {
    cancel: CancelRequestCallback,
    promise: Promise<HttpResponse>
  } {
    const {cancel, promise} = super.sendRequest(url, requestOptions)
    const newPromise  = new Promise<HttpResponse>((resolve, reject)=>{
      // 如何在不影响过多请求性能的情况下做服务端证书校验(公钥比对)?
      tlsCheckRemoteCertificate(url).then(()=>{
        promise.then(resolve).catch(reject)
      }).catch(reject)
    })

    return  {cancel, promise: newPromise}
  }
}

2 回复
可以看下HTTP的https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-network-kit/js-apis-http.md
clientCert用来做双向校验
CertificatePinning证书锁定是校验服务器的证书的公钥SHA-256哈希值是否与设置的值匹配

在HarmonyOS鸿蒙Next系统中,若想在DefaultHttpClient中实现对服务端SSL证书进行校验(公钥比对),你需要自定义SSLSocketFactoryX509TrustManager。以下是一个简要的实现思路:

  1. 自定义SSLSocketFactory:通过重载SSLSocketFactory类,并在其内部实现SSL连接的创建,确保使用正确的证书和密钥库。

  2. 自定义X509TrustManager:实现X509TrustManager接口,重写checkClientTrustedcheckServerTrustedgetAcceptedIssuers方法。在checkServerTrusted中,你可以加载预期的公钥或证书链,并与服务端的证书进行比对。

  3. 配置DefaultHttpClient:使用SchemeRegistryThreadSafeClientConnManager来配置DefaultHttpClient,使其使用自定义的SSLSocketFactoryX509TrustManager

  4. 执行HTTP请求:配置完成后,通过DefaultHttpClient发送HTTP请求,此时将自动进行SSL证书的校验。

请注意,实际操作中需处理异常和错误情况,确保代码的健壮性。此外,由于HarmonyOS可能更新其API或安全策略,务必参考最新的官方文档进行开发。

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

回到顶部