阅览了cocos creator相关issue,仍然没有解决问题
问题描述: websocket使用wss协议链接不上服务器
环境: 操作系统win7, cocos creator 1.8.2 版本
新建空项目的测试用的代码:
var ws = new WebSocket("wss://h5.zltianhen.com/uc", "whmj", cc.url.raw("resources/DSTRootCAX3.crt")); ws.onopen = function (evt) { console.log("onopen"); alert("success"); } ws.onerror = function (evt) { console.log("onerror"); console.log(evt); alert("error"); } ws.onclose = function (evt) { console.log("onclose"); console.log(evt); alert("onclose"); }
浏览器效果: 链接成功,弹出onopen
编译成ios包的效果: 链接成功
编译成android包的效果: 链接失败
我自己对于问题所做的工作:
猜测1: 是否是服务器的原因导致?
操作1: 使用浏览器链接服务器,成功。
操作2: 使用ios包链接服务器,成功。
结论: 服务器的websocket处理是符合websocket标准协议的
猜测2: 是否是安卓的websocket库导致的?
操作1: 使用 new WebSocket("wss://echo.websocket.org")
方式链接别人的websocket 服务器,成功
结论: 安卓包甚至都不需要导入ca 文件都能成功,看来安卓库也不一定有问题,换个思路
猜测3: ca root文件有问题?
操作: 打开浏览器,访问我们的服务器网站,查看证书,选择详细信息labelbox,复制证书,导出证书,确认内容,内容和原先的一样
结论: ca证书没有问题
猜测4: 证书格式有问题?
操作:导出 cer二进制文件来使用,不行。
结论:看来不是二进制
猜测5: 导出的base64编码的cer证书后缀名有问题?
操作 : 到浏览器导出cer二进制文件,使用openssl生成pem后缀文件,发现pem和base64编码的cer文件一样
结论: 证书没有问题
报错内容:
05-14 15:06:18.992 15705-15838/com.bailing.MoneyGuest D/WebSocket.cpp: scheme: wss, host: h5.zltianhen.com, port: 0, path: /uc 05-14 15:06:18.992 15705-15838/com.bailing.MoneyGuest D/WebSocket.cpp: CA file (/data/data/com.bailing.MoneyGuest/files/DSTRootCAX3.pem) in writable path exists! 05-14 15:06:18.992 15705-15838/com.bailing.MoneyGuest D/WebSocket.cpp: NOTICE: Creating Vhost 'default' port -1, 1 protocols, IPv6 on 05-14 15:06:19.002 15705-15838/com.bailing.MoneyGuest D/WebSocket.cpp: WebSocket (0x63287538) Unhandled websocket event: 32 05-14 15:06:19.002 15705-15838/com.bailing.MoneyGuest D/WebSocket.cpp: WebSocket (0x63287538) Unhandled websocket event: 29 05-14 15:06:19.022 15705-15838/com.bailing.MoneyGuest D/WebSocket.cpp: ERR: SSL connect error 337047686: error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed 05-14 15:06:21.482 15705-15838/com.bailing.MoneyGuest D/WebSocket.cpp: WebSocket (0x63287538) onConnectionError, state: 0 ... 05-14 15:06:21.482 15705-15838/com.bailing.MoneyGuest D/WebSocket.cpp: WebSocket (0x63287538) onConnectionClosed, state: 2 ... 05-14 15:06:21.482 15705-15838/com.bailing.MoneyGuest D/WebSocket.cpp: onConnectionClosed, WebSocket (0x63287538) is closing by server. 05-14 15:06:21.482 15705-15838/com.bailing.MoneyGuest D/WebSocket.cpp: WebSocket (0x63287538) onConnectionClosed DONE! 05-14 15:06:21.482 15705-15838/com.bailing.MoneyGuest D/WebSocket.cpp: WebSocket (0x63287538) Unhandled websocket event: 45 05-14 15:06:21.482 15705-15838/com.bailing.MoneyGuest D/WebSocket.cpp: WebSocket (0x63287538) Unhandled websocket event: 33 05-14 15:06:21.482 15705-15838/com.bailing.MoneyGuest D/WebSocket.cpp: WebSocket (0x63287538) onConnectionClosed, state: 3 ... 05-14 15:06:21.502 15705-15810/com.bailing.MoneyGuest D/jswrapper: JS: [object Object] 05-14 15:06:21.502 15705-15810/com.bailing.MoneyGuest D/jswrapper: JS: DeviceData.statics.isgettrue 05-14 15:06:21.522 15705-15810/com.bailing.MoneyGuest D/jswrapper: JS: 连接失败 05-14 15:06:21.522 15705-15810/com.bailing.MoneyGuest D/jswrapper: JS: [object Object] 05-14 15:06:21.522 15705-15810/com.bailing.MoneyGuest D/jswrapper: JS: 连接关闭