HarmonyOS 鸿蒙Next 如何在DefaultHttpClient 中实现对服务端SSL证书进行校验(公钥比对)?
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}
}
}
clientCert用来做双向校验
CertificatePinning证书锁定是校验服务器的证书的公钥SHA-256哈希值是否与设置的值匹配
在HarmonyOS鸿蒙Next系统中,若想在DefaultHttpClient
中实现对服务端SSL证书进行校验(公钥比对),你需要自定义SSLSocketFactory
和X509TrustManager
。以下是一个简要的实现思路:
-
自定义SSLSocketFactory:通过重载
SSLSocketFactory
类,并在其内部实现SSL连接的创建,确保使用正确的证书和密钥库。 -
自定义X509TrustManager:实现
X509TrustManager
接口,重写checkClientTrusted
、checkServerTrusted
和getAcceptedIssuers
方法。在checkServerTrusted
中,你可以加载预期的公钥或证书链,并与服务端的证书进行比对。 -
配置DefaultHttpClient:使用
SchemeRegistry
和ThreadSafeClientConnManager
来配置DefaultHttpClient
,使其使用自定义的SSLSocketFactory
和X509TrustManager
。 -
执行HTTP请求:配置完成后,通过
DefaultHttpClient
发送HTTP请求,此时将自动进行SSL证书的校验。
请注意,实际操作中需处理异常和错误情况,确保代码的健壮性。此外,由于HarmonyOS可能更新其API或安全策略,务必参考最新的官方文档进行开发。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html