HarmonyOS鸿蒙Next中有人使用@ohos/xmpp_client 实现基于xmpp框架实现im吗?

HarmonyOS鸿蒙Next中有人使用@ohos/xmpp_client 实现基于xmpp框架实现im吗? 有人使用@ohos/xmpp_client 实现基于xmpp框架实现im吗? 我这边将pem文件存储到沙箱目录中 并通过

AppStorage.SetOrCreate<string>('caPath', pemPath);存储储存沙箱地址

在设置capath时候

caPath: AppStorage.Get<string>('caPath')

但是我这边还是一直这个异常:为什么? 大家有知道的吗
[tls_certificate.cpp:68] data is null in the TLSCertificate constructor [tls_socket.cpp:1796] SSLConnect fail 2303505, error: error:00000195:lib(0)::reason(405) errno: 0 ERR_get_error error:0A000086:SSL routines::certificate verify failed [tls_socket.cpp:1532] failed to shaking hands [tls_socket.cpp:751] connect error is 2303505 0 tlsSocket-----------------connect-err {“code”:2303505,“message”:“Error occurred in the tls system call”}


更多关于HarmonyOS鸿蒙Next中有人使用@ohos/xmpp_client 实现基于xmpp框架实现im吗?的实战教程也可以访问 https://www.itying.com/category-93-b0.html

5 回复

开发者您好,请提供下完整的hilog日志。

更多关于HarmonyOS鸿蒙Next中有人使用@ohos/xmpp_client 实现基于xmpp框架实现im吗?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


看日志是它没有获取到证书的内容啊,你确定你传的路径是正确的吗

正确的 按照他们要求存放在沙箱目录中 存放地址 然后用沙箱地址调用后还是这样,

在HarmonyOS Next中,目前没有官方支持的@ohos/xmpp_client库。鸿蒙Next的ArkTS/ArkUI框架主要提供基于WebSocket的即时通讯能力,可通过@ohos.net.webSocket模块实现IM功能。若需XMPP协议,需自行封装原生XMPP库或使用第三方适配方案,但需注意鸿蒙Next不支持直接调用Java/C的XMPP库。建议关注华为开发者联盟的官方能力更新。

根据您提供的错误信息,问题核心在于TLS握手时证书验证失败。@ohos/xmpp_client 在建立TLS连接时,无法正确加载或验证您提供的PEM证书文件。

错误 certificate verify faileddata is null in the TLSCertificate constructor 表明,虽然您传入了证书路径(caPath),但系统在指定路径未能成功读取到有效的证书数据。

主要原因和排查方向如下:

  1. 证书文件路径问题:这是最可能的原因。AppStorage 存储的 pemPath 可能是一个应用沙箱内的绝对路径(例如 files://.../data/app/...)。@ohos/xmpp_client 底层的TLS库(通常是C++实现)在读取文件时,可能无法直接解析这种HarmonyOS特有的URI路径或受限的沙箱路径。

  2. 证书文件内容或格式问题:PEM文件可能已损坏、格式不正确(例如不是标准的PEM编码),或者不是TLS连接所需的CA证书。

建议的解决方案:

重点检查并修正证书文件的加载方式。

  • 不要仅传递路径字符串:尝试将证书文件内容读取为二进制数据(ArrayBuffer)或Base64字符串,然后将数据本身(而非路径)传递给TLS连接配置项。查看 @ohos/xmpp_client 或相关网络API(如 tlsSocket)的文档,看是否支持直接传入证书数据(如 caCerts: Uint8Array[] 或类似字段)。
  • 验证路径有效性:确保 pemPath 是底层系统可访问的真实文件路径。在HarmonyOS Next中,使用 fs 模块的API(如 fs.access)检查文件是否存在且可读。沙箱目录路径通常需要通过 context 获取(如 getContext(this).filesDir)。
  • 简化调试:为排除证书本身的问题,在开发测试阶段,可以尝试暂时关闭服务器证书验证(如果API支持设置 insecureSkipVerify 之类的选项)。但这仅用于定位问题,生产环境必须启用验证。
  • 查阅实际API:直接查阅 @ohos/xmpp_client 模块的官方API文档,确认 caPath 参数期望的输入格式(是文件路径字符串,还是文件描述符,或是数据缓冲区),以及是否有其他替代的证书配置方式。

总结:当前异常的直接原因是TLS层未从您提供的 caPath 路径中获取到有效的证书数据。请优先将排查重点放在如何将证书文件内容正确加载并传递给TLS库上,而不是仅仅传递一个可能无法被底层识别的沙箱路径字符串。

回到顶部