3D 1.0.3 版本在Android 模拟器上 websocket 无法建立连接

D/WebSocket.cpp: WebSocket (0xc4188a80) Unhandled websocket event: 58
    ERR: SSL error: unable to get local issuer certificate (preverify_ok=0;err=20;depth=1)
    ERR: SSL connect error 337047686: error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed

1.0.3 版本,请问和android sdk & ndk 版本有关吗?还是libwebsocket这个库有问题?

这是缺少 wss 证书导致的,项目中需要添加

在不添加证书的情况下,http/https 可以连接, ws/wss 都连接不了,错误提示都是

unable to get local issuer certificate

在添加证书的情况下也一样,我测试了两种方式,证书我是从服务器导出的。

1、把证书直接装进模拟器
2、使用 google 的 网络安全配置

这是 websocket 库需要的证书,所以不影响 http,你是怎么安装的证书?

第一种方式:

第二种把证书放在项目里,通过网络安全配置

需要放在包体里面,我下午帮你问下具体怎么做

我用第二种方式,证书是放在包里的,在res/raw 文件夹下,所以配置里用 @raw/ca1 可以找到

参考 example-cases, https://github.com/cocos-creator/example-cases/blob/master/assets/cases/05_scripting/11_network/NetworkCtrl.js#L106
把整数 url 传入 websocket 试试

已经建立任务在 3d 测试用例中增加网络测试用例

this._wsiSendBinary = new WebSocket(“wss://echo.websocket.org”, [], this.wssCacert.url);

在typescript里好像只提供了最多俩个参数的接口

我看了libwebsocket的 github issues,有提到这个错误的,回答大部分是没有提供证书,不过是否也有相信服务器端证书的解决方案?这样就不用自己提供证书了,似乎更符合开发习惯。目前,我手头没有真机,所以也不知道这个问题是否只在模拟器环境下才有,还是真机环境下也存在这个问题。

3d 后续版本,是否都要自己加证书?如果必须加,typescript的头文件能否把接口修改一下

不是像小游戏这种硬性要求wss的,为什么不直接用ws,又不会报错,又省事

你说的没错,但现在需要用wss,而自带证书,证书有可能会变动,所以希望引擎能支持

2.4.3版本,我这边连接不上

同样遇到,请问解决了吗