HarmonyOS鸿蒙Next中如何实现 WebSocket 连接的 TLS 证书绑定(SSL Pinning)以防止中间人攻击?

HarmonyOS鸿蒙Next中如何实现 WebSocket 连接的 TLS 证书绑定(SSL Pinning)以防止中间人攻击? 需要防止抓包工具(如 Charles)拦截 WebSocket 流量。有没有类似 OkHttp 的 CertificatePinner 机制?

10 回复

时间戳+随机数:请求带上时间戳和随机数,防止重放攻击

更多关于HarmonyOS鸿蒙Next中如何实现 WebSocket 连接的 TLS 证书绑定(SSL Pinning)以防止中间人攻击?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


没搞过

自定义DNS服务器防止DNS劫持

确保服务器端的SSL/TLS证书是有效的,并由受信任的证书颁发机构颁发

使用HTTPS协议进行网络通信,确保数据传输过程中的加密和完整性。

在WebSocket配置证书

在HarmonyOS鸿蒙Next中实现WebSocket的TLS证书绑定,可通过@ohos.net.webSocket模块的WebSocket类实现。创建连接时,在options参数中配置caCerts字段,指定预置的证书数据(PEM格式)。系统将验证服务器证书是否与绑定的证书匹配,不匹配则终止连接。此过程在应用层完成,无需依赖系统证书库。

在HarmonyOS Next中,可以通过@ohos.net.webSocket模块的WebSocket类实现TLS证书绑定(SSL Pinning)。核心方法是使用setExtraOptions()配置连接参数,绑定指定的证书指纹。

主要步骤如下:

  1. 获取证书指纹:从服务器证书中提取公钥的SHA-256指纹(格式如:sha256/Base64EncodedFingerprint)。

  2. 配置绑定参数:创建WebSocketExtraOptions对象,设置pinnedCertificates字段为指纹数组。

  3. 建立连接:创建WebSocket实例,调用setExtraOptions()应用配置,然后发起连接。

示例代码:

import { webSocket } from '@ohos.net.webSocket';
import { BusinessError } from '@ohos.base';

let ws = new webSocket.WebSocket();
let extraOptions: webSocket.WebSocketExtraOptions = {
  // 配置绑定的证书指纹(支持多个)
  pinnedCertificates: [
    'sha256/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=',
    'sha256/BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB='
  ]
};

// 设置额外选项(包括证书绑定)
try {
  ws.setExtraOptions(extraOptions);
} catch (error) {
  let err: BusinessError = error as BusinessError;
  console.error(`Failed to set extra options. Code: ${err.code}, message: ${err.message}`);
  return;
}

// 连接WebSocket服务器
ws.connect('wss://example.com/socket', (err: BusinessError) => {
  if (err) {
    console.error(`Connection failed. Code: ${err.code}, message: ${err.message}`);
    return;
  }
  console.log('Connected with certificate pinning enabled');
});

关键说明

  • 连接时,系统会验证服务器证书是否与绑定的指纹匹配,不匹配则拒绝连接。
  • 指纹必须是服务器证书链中任一证书的公钥指纹(支持叶子证书或中间CA证书)。
  • 支持绑定多个指纹以应对证书轮换。
  • 此配置仅对当前WebSocket实例生效。

这种方式能有效防止中间人攻击,即使抓包工具安装了自定义根证书也无法拦截流量。

回到顶部