websocket使用ssl链接不上服务器(已解决)

感谢大神的方法,终于搞好了:slightly_smiling:

感谢兄弟 用自己的证书不行 用官方的就好了

12456

如果证书过期更换证书,服务器和客户端需要同时换,只能停服更新吗?有没有更换好的思路

你怎么解决的

关于你说的证书是这个吗

官网哪里呀,我怎么没有看到,可以发个链接给我不

正解,太强了

同问,官方有注意到这个问题吗/

感谢大佬,我的也成功了!!!啊啊啊啊啊

这个问题应该在新版本的2.x已经解决

18年的都还能挖 :rofl: :rofl: :rofl:

Cocos Creator 2.x 在 Android 平台使用 wss 加密协议握手失败

非入侵引擎式解决方案

客户端

在得到 中间和根证书 .cer 后需要转换为 Base64.cer 证书才能使用

转换步骤(Windows 11 系统环境)

  • 双击 中间和根证书.cer 文件,进行 Base64 的证书导出操作

  • 导出后将 cacert.cer 证书放入到 resources/ssl/ 目录下,在 new WebScoket() 时的第 3 个参数传入得到的原生路径

try {

    if (cc.sys.isNative && cc.sys.os == cc.sys.OS_ANDROID && url.startsWith("wss")) {

        let cacert = cc.url.raw('resources/ssl/cacert.cer');

        if (cc.loader.md5Pipe) {

            cacert = cc.loader.md5Pipe.transformURL(cacert);

        }

        //@ts-ignore

        this._websocket = new WebSocket(url, null, cacert);

    } else {

        this._websocket = new WebSocket(url);

    }

} catch (e) {

    this.onError();

    this.onClose();

    return;

}

服务端

由于服务端使用 JAVA 开发,使用 .jks 的证书

  • 需要将 .cer / .pem 文件转换为 .pkcs12 文件后

  • 再将 .pkcs12 文件转换为 .jks 文件,供服务端使用


# 生成 .pkcs12

openssl pkcs12 -export -in 中间和根证书.cer -inkey 域名文件.key -certfile ca.cer -out 域名文件.p12 -name 别名 -password pass:密码


# 生成 .jks

keytool -importkeystore -srckeystore 域名文件.p12 -srcstoretype PKCS12 -srcstorepass 密码 -destkeystore 域名文件.jks -deststoretype JKS -deststorepass 密码 -alias 别名

注意事项

  1. 中间和根证书 .cer 一定是 full.cer,并非 域名.cer

  2. 如果是 .pem 证书,需将 .pem 的后缀改为 .cer 后再进行 Base64 证书转换导出