libwebsockets连接https

在3.15中,websockets终于支持了ssl,使用起来各种蒙圈,求助!!!
使用 socketsio进行https连接,发现,都会在 SSL_get_verify_result 中证书验证报错
错误信息为:
ERR: server’s cert didn’t look good, X509_V_ERR = 20: error:00000014:lib(0):func(0):reason(20)

如果直接将 ssl-client.c 中 函数 lws_ssl_client_connect2 中的验证判定直接注释掉,重新打包就可以。

想一下,能不能不改底层,通过 context的 option 或者其他设置,让我这边的客户端,不使用ca证书,不用验证证书,就能够连接到 https中去?
顺便问一下 LWS_USE_POLARSSL 跟 LWS_USE_MBEDTLS 这两种方式是什么东西,如果要设置这两种宏, 需要怎么设置?

:sweat_smile:日,直接在 WebSocket::init 中把官方的ca证书 _caFilePath = “cacert.pem”; 拿来用就可以了,但是为啥呢。。对SSL证书,真心不熟悉。

最后吐槽下 websockets.cpp中的接口
void WsThreadHelper::onSubThreadStarted()
{
int log_level = LLL_ERR | LLL_WARN | LLL_NOTICE | LLL_INFO | LLL_DEBUG | LLL_PARSER | LLL_HEADER | LLL_EXT | LLL_CLIENT | LLL_LATENCY;
lws_set_log_level(log_level, printWebSocketLog);
。。。。
除了用来屏蔽 NOTICE消息有用,一毛用处都没有,都编译好了, LLL_INFO 这些根本没法用。还不如不加进来,纯属恶心人

浏览器默认集成了ca root file,所以连接的时候可以不需要指定 ca root file。
我们是直接用openssl,做ssl连接的时候,就需要指定一个ca file作为验证服务端证书的有效性。
ca文件可以从浏览器导出,也可以从curl(http://curl.haxx.se/ca/cacert.pem)上下载一个。具体可以查看
http://discuss.cocos2d-x.org/t/websocket-supports-ssl-connections/34611

lws_set_log_level的确受控于编译的libwebsockets的模式,debug版本才可以开启info和debug的level。
这是libwebsockets这个第三方库决定的。当要调试libwebsockets这个库的时候,就有用了。

恩,谢谢。
不过,郁闷的是,我在mac上,双系统, win32上运行代码,发现,怎么都无法获取ca证书
报错:ERR: server’s cert didn’t look good, X509_V_ERR = 20: error:00000014:lib(0):func(0):reason(20)
路径没问题,在其他电脑上可以运行链接。
请问,可能是什么问题呢?

你具体是如何使用WebSocket的接口?
可以确认一下执行文件exe的目录下,cacert.pem是否有拷贝过去。
如果还是如此,请把详细的日志发一下吧。

1赞

我是直接使用 r0 版本中,websocket 的测试用例
exe下有 cacert.pem文件
具体log如下:
“cpp-tests.exe”(Win32): 已加载“C:\cocos2d-x-3.15rc0\cocos2d-x-3.15rc0\build\Debug.win32\cpp-tests\cpp-tests.exe”。已加载符号。
“cpp-tests.exe”(Win32): 已加载“C:\Windows\SysWOW64\ntdll.dll”。无法查找或打开 PDB 文件。
“cpp-tests.exe”(Win32): 已加载“C:\Windows\SysWOW64\kernel32.dll”。无法查找或打开 PDB 文件。
“cpp-tests.exe”(Win32): 已卸载“C:\Windows\SysWOW64\kernel32.dll”
“cpp-tests.exe”(Win32): 已加载“C:\Windows\SysWOW64\kernel32.dll”。无法查找或打开 PDB 文件。
“cpp-tests.exe”(Win32): 已加载“C:\Windows\SysWOW64\KernelBase.dll”。无法查找或打开 PDB 文件。
“cpp-tests.exe”(Win32): 已加载“C:\Windows\SysWOW64\apphelp.dll”。无法查找或打开 PDB 文件。
“cpp-tests.exe”(Win32): 已加载“C:\Windows\SysWOW64\ws2_32.dll”。无法查找或打开 PDB 文件。
“cpp-tests.exe”(Win32): 已加载“C:\Windows\SysWOW64\sechost.dll”。无法查找或打开 PDB 文件。
“cpp-tests.exe”(Win32): 已加载“C:\Windows\SysWOW64\opengl32.dll”。无法查找或打开 PDB 文件。
“cpp-tests.exe”(Win32): 已加载“C:\Windows\SysWOW64\rpcrt4.dll”。无法查找或打开 PDB 文件。
“cpp-tests.exe”(Win32): 已加载“C:\Windows\SysWOW64\msvcrt.dll”。无法查找或打开 PDB 文件。
“cpp-tests.exe”(Win32): 已加载“C:\Windows\SysWOW64\sspicli.dll”。无法查找或打开 PDB 文件。
“cpp-tests.exe”(Win32): 已加载“C:\Windows\SysWOW64\advapi32.dll”。无法查找或打开 PDB 文件。
“cpp-tests.exe”(Win32): 已加载“C:\Windows\SysWOW64\cryptbase.dll”。无法查找或打开 PDB 文件。
“cpp-tests.exe”(Win32): 已加载“C:\Windows\SysWOW64\gdi32.dll”。无法查找或打开 PDB 文件。
“cpp-tests.exe”(Win32): 已加载“C:\Windows\SysWOW64\bcryptprimitives.dll”。无法查找或打开 PDB 文件。
“cpp-tests.exe”(Win32): 已加载“C:\Windows\SysWOW64\gdi32full.dll”。无法查找或打开 PDB 文件。
“cpp-tests.exe”(Win32): 已加载“C:\Windows\SysWOW64\user32.dll”。无法查找或打开 PDB 文件。
“cpp-tests.exe”(Win32): 已加载“C:\Windows\SysWOW64\win32u.dll”。无法查找或打开 PDB 文件。
“cpp-tests.exe”(Win32): 已加载“C:\Windows\SysWOW64\msvcp120d.dll”。无法查找或打开 PDB 文件。
“cpp-tests.exe”(Win32): 已加载“C:\Windows\SysWOW64\msvcr120d.dll”。无法查找或打开 PDB 文件。
“cpp-tests.exe”(Win32): 已加载“C:\Windows\SysWOW64\glu32.dll”。无法查找或打开 PDB 文件。
“cpp-tests.exe”(Win32): 已加载“C:\Windows\SysWOW64\ddraw.dll”。无法查找或打开 PDB 文件。
“cpp-tests.exe”(Win32): 已加载“C:\Windows\SysWOW64\dciman32.dll”。无法查找或打开 PDB 文件。
“cpp-tests.exe”(Win32): 已加载“C:\cocos2d-x-3.15rc0\cocos2d-x-3.15rc0\build\Debug.win32\cpp-tests\libcurl.dll”。模块已生成,不包含符号。
“cpp-tests.exe”(Win32): 已加载“C:\Windows\SysWOW64\Wldap32.dll”。无法查找或打开 PDB 文件。
“cpp-tests.exe”(Win32): 已加载“C:\Windows\SysWOW64\ucrtbase.dll”。无法查找或打开 PDB 文件。
“cpp-tests.exe”(Win32): 已加载“C:\Windows\SysWOW64\normaliz.dll”。无法查找或打开 PDB 文件。
“cpp-tests.exe”(Win32): 已加载“C:\cocos2d-x-3.15rc0\cocos2d-x-3.15rc0\build\Debug.win32\cpp-tests\glew32.dll”。模块已生成,不包含符号。
“cpp-tests.exe”(Win32): 已加载“C:\Windows\SysWOW64\msvcr120.dll”。无法查找或打开 PDB 文件。
“cpp-tests.exe”(Win32): 已加载“C:\cocos2d-x-3.15rc0\cocos2d-x-3.15rc0\build\Debug.win32\cpp-tests\libcocos2d.dll”。已加载符号。
“cpp-tests.exe”(Win32): 已加载“C:\cocos2d-x-3.15rc0\cocos2d-x-3.15rc0\build\Debug.win32\cpp-tests\libssl-1_1.dll”。无法查找或打开 PDB 文件。
“cpp-tests.exe”(Win32): 已加载“C:\cocos2d-x-3.15rc0\cocos2d-x-3.15rc0\build\Debug.win32\cpp-tests\libcrypto-1_1.dll”。无法查找或打开 PDB 文件。
“cpp-tests.exe”(Win32): 已加载“C:\Windows\SysWOW64\shell32.dll”。无法查找或打开 PDB 文件。
“cpp-tests.exe”(Win32): 已加载“C:\Windows\SysWOW64\cfgmgr32.dll”。无法查找或打开 PDB 文件。
“cpp-tests.exe”(Win32): 已加载“C:\Windows\SysWOW64\windows.storage.dll”。无法查找或打开 PDB 文件。
“cpp-tests.exe”(Win32): 已加载“C:\Windows\SysWOW64\combase.dll”。无法查找或打开 PDB 文件。
“cpp-tests.exe”(Win32): 已加载“C:\Windows\SysWOW64\powrprof.dll”。无法查找或打开 PDB 文件。
“cpp-tests.exe”(Win32): 已加载“C:\Windows\SysWOW64\shlwapi.dll”。无法查找或打开 PDB 文件。
“cpp-tests.exe”(Win32): 已加载“C:\cocos2d-x-3.15rc0\cocos2d-x-3.15rc0\build\Debug.win32\cpp-tests\sqlite3.dll”。无法查找或打开 PDB 文件。
“cpp-tests.exe”(Win32): 已加载“C:\Windows\SysWOW64\kernel.appcore.dll”。无法查找或打开 PDB 文件。
“cpp-tests.exe”(Win32): 已加载“C:\Windows\SysWOW64\SHCore.dll”。无法查找或打开 PDB 文件。
“cpp-tests.exe”(Win32): 已加载“C:\Windows\SysWOW64\profapi.dll”。无法查找或打开 PDB 文件。
“cpp-tests.exe”(Win32): 已加载“C:\cocos2d-x-3.15rc0\cocos2d-x-3.15rc0\build\Debug.win32\cpp-tests\websockets.dll”。模块已生成,不包含符号。
“cpp-tests.exe”(Win32): 已加载“C:\Windows\SysWOW64\version.dll”。无法查找或打开 PDB 文件。
“cpp-tests.exe”(Win32): 已加载“C:\cocos2d-x-3.15rc0\cocos2d-x-3.15rc0\build\Debug.win32\cpp-tests\libvorbisfile.dll”。模块已生成,不包含符号。
“cpp-tests.exe”(Win32): 已加载“C:\cocos2d-x-3.15rc0\cocos2d-x-3.15rc0\build\Debug.win32\cpp-tests\libmpg123.dll”。无法查找或打开 PDB 文件。
“cpp-tests.exe”(Win32): 已加载“C:\Windows\SysWOW64\winmm.dll”。无法查找或打开 PDB 文件。
“cpp-tests.exe”(Win32): 已加载“C:\Windows\SysWOW64\msvcr100.dll”。无法查找或打开 PDB 文件。
“cpp-tests.exe”(Win32): 已加载“C:\cocos2d-x-3.15rc0\cocos2d-x-3.15rc0\build\Debug.win32\cpp-tests\zlib1.dll”。无法查找或打开 PDB 文件。
“cpp-tests.exe”(Win32): 已加载“C:\Windows\SysWOW64\msvcr110.dll”。已加载符号。
“cpp-tests.exe”(Win32): 已加载“C:\cocos2d-x-3.15rc0\cocos2d-x-3.15rc0\build\Debug.win32\cpp-tests\libogg.dll”。模块已生成,不包含符号。
“cpp-tests.exe”(Win32): 已加载“C:\cocos2d-x-3.15rc0\cocos2d-x-3.15rc0\build\Debug.win32\cpp-tests\libvorbis.dll”。模块已生成,不包含符号。
“cpp-tests.exe”(Win32): 已加载“C:\cocos2d-x-3.15rc0\cocos2d-x-3.15rc0\build\Debug.win32\cpp-tests\OpenAL32.dll”。模块已生成,不包含符号。
“cpp-tests.exe”(Win32): 已加载“C:\Windows\SysWOW64\winmmbase.dll”。无法查找或打开 PDB 文件。
“cpp-tests.exe”(Win32): 已加载“C:\Windows\SysWOW64\ole32.dll”。无法查找或打开 PDB 文件。
“cpp-tests.exe”(Win32): 已加载“C:\Windows\SysWOW64\imm32.dll”。无法查找或打开 PDB 文件。
“cpp-tests.exe”(Win32): 已加载“C:\Windows\SysWOW64\uxtheme.dll”。无法查找或打开 PDB 文件。
“cpp-tests.exe”(Win32): 已加载“C:\Windows\SysWOW64\dinput8.dll”。无法查找或打开 PDB 文件。
“cpp-tests.exe”(Win32): 已加载“C:\Windows\SysWOW64\XInput1_4.dll”。无法查找或打开 PDB 文件。
“cpp-tests.exe”(Win32): 已加载“C:\Windows\SysWOW64\devobj.dll”。无法查找或打开 PDB 文件。
“cpp-tests.exe”(Win32): 已加载“C:\Windows\SysWOW64\dwmapi.dll”。无法查找或打开 PDB 文件。
“cpp-tests.exe”(Win32): 已加载“C:\Windows\SysWOW64\hid.dll”。无法查找或打开 PDB 文件。
“cpp-tests.exe”(Win32): 已加载“C:\Windows\SysWOW64\setupapi.dll”。无法查找或打开 PDB 文件。
“cpp-tests.exe”(Win32): 已加载“C:\Windows\SysWOW64\wintrust.dll”。无法查找或打开 PDB 文件。
“cpp-tests.exe”(Win32): 已加载“C:\Windows\SysWOW64\msasn1.dll”。无法查找或打开 PDB 文件。
“cpp-tests.exe”(Win32): 已加载“C:\Windows\SysWOW64\crypt32.dll”。无法查找或打开 PDB 文件。
“cpp-tests.exe”(Win32): 已加载“C:\Windows\SysWOW64\ntmarta.dll”。无法查找或打开 PDB 文件。
“cpp-tests.exe”(Win32): 已加载“C:\Windows\SysWOW64\vulkan-1.dll”。模块已生成,不包含符号。
“cpp-tests.exe”(Win32): 已加载“C:\Windows\SysWOW64\amdvlk32.dll”。无法查找或打开 PDB 文件。
“cpp-tests.exe”(Win32): 已卸载“C:\Windows\SysWOW64\amdvlk32.dll”
“cpp-tests.exe”(Win32): 已加载“C:\Windows\SysWOW64\amdvlk32.dll”。无法查找或打开 PDB 文件。
“cpp-tests.exe”(Win32): 已卸载“C:\Windows\SysWOW64\amdvlk32.dll”
“cpp-tests.exe”(Win32): 已加载“C:\Windows\SysWOW64\msctf.dll”。无法查找或打开 PDB 文件。
“cpp-tests.exe”(Win32): 已加载“C:\Windows\SysWOW64\oleaut32.dll”。无法查找或打开 PDB 文件。
“cpp-tests.exe”(Win32): 已加载“C:\Windows\SysWOW64\msvcp_win.dll”。无法查找或打开 PDB 文件。
“cpp-tests.exe”(Win32): 已加载“C:\Windows\System32\DriverStore\FileRepository\c0307252.inf_amd64_6dffefbd48fb9e15\atiglpxx.dll”。无法查找或打开 PDB 文件。
“cpp-tests.exe”(Win32): 已加载“C:\Windows\System32\DriverStore\FileRepository\c0307252.inf_amd64_6dffefbd48fb9e15\atioglxx.dll”。无法查找或打开 PDB 文件。
“cpp-tests.exe”(Win32): 已加载“C:\Windows\SysWOW64\atiadlxy.dll”。无法查找或打开 PDB 文件。
“cpp-tests.exe”(Win32): 已加载“C:\Windows\SysWOW64\psapi.dll”。无法查找或打开 PDB 文件。
“cpp-tests.exe”(Win32): 已加载“C:\Windows\SysWOW64\wtsapi32.dll”。无法查找或打开 PDB 文件。
“cpp-tests.exe”(Win32): 已加载“C:\Windows\SysWOW64\propsys.dll”。无法查找或打开 PDB 文件。
“cpp-tests.exe”(Win32): 已加载“C:\Windows\SysWOW64\userenv.dll”。无法查找或打开 PDB 文件。
“cpp-tests.exe”(Win32): 已加载“C:\Windows\SysWOW64\IPHLPAPI.DLL”。无法查找或打开 PDB 文件。
“cpp-tests.exe”(Win32): 已加载“C:\Windows\System32\DriverStore\FileRepository\c0307252.inf_amd64_6dffefbd48fb9e15\atigktxx.dll”。无法查找或打开 PDB 文件。
“cpp-tests.exe”(Win32): 已卸载“C:\Windows\System32\DriverStore\FileRepository\c0307252.inf_amd64_6dffefbd48fb9e15\atigktxx.dll”
“cpp-tests.exe”(Win32): 已加载“C:\Windows\System32\DriverStore\FileRepository\c0307252.inf_amd64_6dffefbd48fb9e15\atigktxx.dll”。无法查找或打开 PDB 文件。
“cpp-tests.exe”(Win32): 已加载“C:\Windows\SysWOW64\clbcatq.dll”。无法查找或打开 PDB 文件。
“cpp-tests.exe”(Win32): 已加载“C:\Windows\SysWOW64\SogouTSF.ime”。无法查找或打开 PDB 文件。
“cpp-tests.exe”(Win32): 已加载“C:\Windows\SysWOW64\msimg32.dll”。无法查找或打开 PDB 文件。
“cpp-tests.exe”(Win32): 已加载“C:\Windows\SysWOW64\SogouPY.ime”。无法查找或打开 PDB 文件。
“cpp-tests.exe”(Win32): 已加载“C:\Windows\SysWOW64\oleacc.dll”。无法查找或打开 PDB 文件。
“cpp-tests.exe”(Win32): 已加载“C:\Program Files (x86)\SogouInput\8.3.0.9412\Resource.dll”。模块已生成,不包含符号。
“cpp-tests.exe”(Win32): 已加载“C:\Program Files (x86)\SogouInput\Components\PicFace\1.0.0.1672\PicFace.dll”。无法查找或打开 PDB 文件。
“cpp-tests.exe”(Win32): 已加载“C:\Windows\SysWOW64\comdlg32.dll”。无法查找或打开 PDB 文件。
“cpp-tests.exe”(Win32): 已加载“C:\Windows\WinSxS\x86_microsoft.windows.common-controls_6595b64144ccf1df_5.82.14393.447_none_5507ded2cb4f7f4c\comctl32.dll”。无法查找或打开 PDB 文件。
线程 0x3198 已退出,返回值为 0 (0x0)。
Ready for GLSL
Ready for OpenGL 2.0

{
cocos2d.x.version: cocos2d-x-3.15
cocos2d.x.compiled_with_profiler: false
cocos2d.x.build_type: DEBUG
cocos2d.x.compiled_with_gl_state_cache: true
cocos2d.x.fps: 60
cocos2d.x.3d.max_point_light_in_shader: 1
gl.renderer: AMD Radeon Pro 455
cocos2d.x.display_fps: true
gl.max_texture_units: 192
cocos2d.x.gl.projection: 3d
gl.supports_OES_map_buffer: false
cocos2d.x.texture.pixel_format_for_png: rgba8888
gl.supports_vertex_array_object: true
cocos2d.x.3d.max_dir_light_in_shader: 1
gl.supports_ATITC: false
cocos2d.x.texture.pvrv2_has_alpha_premultiplied: false
gl.vendor: ATI Technologies Inc.
cocos2d.x.testcpp.autorun: false
cocos2d.x.3d.max_spot_light_in_shader: 1
cocos2d.x.3d.animate_quality: 2
gl.version: 4.5.14009 Compatibility Profile Context 21.19.128.7
gl.supports_NPOT: true
gl.max_texture_size: 16384
gl.supports_OES_packed_depth_stencil: false
gl.supports_ETC1: false
gl.supports_S3TC: true
gl.supports_PVRTC: false
gl.supports_BGRA8888: false
gl.supports_discard_framebuffer: false
gl.supports_OES_depth24: false
}

“cpp-tests.exe”(Win32): 已加载“C:\Windows\SysWOW64\mswsock.dll”。无法查找或打开 PDB 文件。
Console: IPV6 server is listening on [::]:5678
cocos2d: fullPathForFilename: No file found at /cc_2x2_white_image. Possible missing file.
cocos2d: QuadCommand: resizing index size from [-1] to [2560]
线程 0x34a0 已退出,返回值为 0 (0x0)。
cocos2d: TextureCache: removing unused texture: C:/cocos2d-x-3.15rc0/cocos2d-x-3.15rc0/build/Debug.win32/cpp-tests/hd/Images/close.png
线程 0x340c 已退出,返回值为 0 (0x0)。
D/WebSocket.cpp (415): WebSocket thread start, helper instance: 10312F28

D/WebSocket.cpp (167): NOTICE: Initial logging level 1023

D/WebSocket.cpp (167): NOTICE: Libwebsockets version: 2.1.0 desktop-8c9aqu5\cocosengine@DESKTOP-8C9AQU5-v3.4-141-gcddc296

D/WebSocket.cpp (167): NOTICE: IPV6 not compiled in

D/WebSocket.cpp (167): NOTICE: libev support not compiled in

D/WebSocket.cpp (167): NOTICE: libuv support not compiled in

D/WebSocket.cpp (167): NOTICE: Threads: 1 each 30000 fds

D/WebSocket.cpp (167): NOTICE: Compiled with OpenSSL support

D/WebSocket.cpp (167): NOTICE: mem: per-conn: 392 bytes + protocol rx buf

D/WebSocket.cpp (873): scheme: wss, host: echo.websocket.org, port: 0, path:

D/WebSocket.cpp (167): NOTICE: Creating Vhost ‘default’ port -1, 2 protocols, IPv6 off

“cpp-tests.exe”(Win32): 已加载“C:\Windows\SysWOW64\cryptsp.dll”。无法查找或打开 PDB 文件。
“cpp-tests.exe”(Win32): 已加载“C:\Windows\SysWOW64\rsaenh.dll”。无法查找或打开 PDB 文件。
“cpp-tests.exe”(Win32): 已加载“C:\Windows\SysWOW64\bcrypt.dll”。无法查找或打开 PDB 文件。
D/WebSocket.cpp (167): ERR: Unable to load SSL Client certs file from C:UserscdrDownloadscacert.pem – client ssl isn’t going to work

D/WebSocket.cpp (167): NOTICE: lws_protocol_init

“cpp-tests.exe”(Win32): 已加载“C:\Windows\SysWOW64\dnsapi.dll”。无法查找或打开 PDB 文件。
“cpp-tests.exe”(Win32): 已加载“C:\Windows\SysWOW64\nsi.dll”。无法查找或打开 PDB 文件。
“cpp-tests.exe”(Win32): 已加载“C:\Windows\SysWOW64\rasadhlp.dll”。无法查找或打开 PDB 文件。
“cpp-tests.exe”(Win32): 已加载“C:\Windows\SysWOW64\FWPUCLNT.DLL”。无法查找或打开 PDB 文件。
D/WebSocket.cpp (1322): WebSocket (103A87C0) Unhandled websocket event: 32

D/WebSocket.cpp (1322): WebSocket (103A87C0) Unhandled websocket event: 29

D/WebSocket.cpp (167): ERR: server’s cert didn’t look good, X509_V_ERR = 20: error:00000014:lib(0):func(0):reason(20)

D/WebSocket.cpp (1197): WebSocket (103A87C0) onConnectionError, state: 0 …

D/WebSocket.cpp (1226): WebSocket (103A87C0) onConnectionClosed, state: 2 …

D/WebSocket.cpp (1256): onConnectionClosed, WebSocket (103A87C0) is closing by server.

D/WebSocket.cpp (1279): WebSocket (103A87C0) onConnectionClosed DONE!

D/WebSocket.cpp (1322): WebSocket (103A87C0) Unhandled websocket event: 45

D/WebSocket.cpp (1322): WebSocket (103A87C0) Unhandled websocket event: 33

D/WebSocket.cpp (1226): WebSocket (103A87C0) onConnectionClosed, state: 3 …

Error was fired, error code: 1
onClose: websocket instance (103A87C0) closed.
D/WebSocket.cpp (545): In the destructor of WebSocket (103A87C0)

WebSocketTest ref: 3
线程 0x3378 已退出,返回值为 0 (0x0)。
线程 0x28b8 已退出,返回值为 0 (0x0)。

而且,编译结果在其他电脑上运行没问题

如果实在没办法使用 SSL_CTX_set_cert_verify_callback 设置屏蔽掉验证可以吗?不过,websocket中有没有获取SSL_CTX的接口?

实在找不到get SSL_CTX的方法了,看了下libwebsockets,用下面的方法跳出去(感觉很坑爹,希望能够提供SSL_CTX的获取接口,如果想自定义回调也可以方便很多)

在websocket.cpp中,
修改函数: struct lws_vhost* WebSocket::createVhost(struct lws_protocols* protocols, int& sslConnection)

在lws_vhost* vhost = lws_create_vhost(__wsContext, &info); 前,新加如下代码:

//这里开始
SSL_METHOD *method;
method = (SSL_METHOD *)SSLv23_client_method();
SSL_CTX * ssl_ctx = SSL_CTX_new(method);
SSL_CTX_set_options(ssl_ctx, SSL_OP_NO_COMPRESSION);//这里有点疑问,不知道 #ifdef SSL_OP_NO_COMPRESSION,是否触发
SSL_CTX_set_options(ssl_ctx,
SSL_OP_CIPHER_SERVER_PREFERENCE);

if (!info.ssl_ca_filepath) {
	if (!SSL_CTX_load_verify_locations(
		ssl_ctx, NULL,
		LWS_OPENSSL_CLIENT_CERTS))
		lwsl_err(
		"Unable to load SSL Client certs from %s "
		"(set by --with-client-cert-dir= "
		"in configure) --  client ssl isn't "
		"going to work", LWS_OPENSSL_CLIENT_CERTS);
}
else
	if (!SSL_CTX_load_verify_locations(
		ssl_ctx, info.ssl_ca_filepath,
		NULL))
		lwsl_err(
		"Unable to load SSL Client certs "
		"file from %s -- client ssl isn't "
		"going to work", info.ssl_ca_filepath);
	else
		lwsl_info("loaded ssl_ca_filepath\n");

  //到这里,基本是libwebsocket中,provided_client_ssl_ctx为空,也就是正常创建SSL_CTX的流程,中间删了一部分东西
int args;//这个是参数,随便给的
SSL_CTX_set_cert_verify_callback(ssl_ctx, always_true_callback, (void*)&args); //主要是这句 ,自定义验证证书的回调,不使用正常的判定

info.provided_client_ssl_ctx = ssl_ctx;//lws_create_vhot中,会判定是否使用自定义的ssl_ctx,也就是 info.provided_client_ssl_ctx ,自定义的,也就添加了自己的callback

另外,添加函数,跳出所有判定
static int always_true_callback(X509_STORE_CTX *ctx, void *arg)
{
return 1;
}

!疑问1,请问 #ifdef SSL_OP_NO_COMPRESSION,是否触发

! 疑问2,libwebsockets中,有以下代码,如果自定义SSL_CTX时,则不会触发,需不需要添加进去
memset(&wsi, 0, sizeof(wsi));
wsi.vhost = vhost;
wsi.context = vhost->context;

vhost->protocols[0].callback(&wsi,
		LWS_CALLBACK_OPENSSL_LOAD_EXTRA_CLIENT_VERIFY_CERTS,
			       vhost->ssl_client_ctx, NULL, 0);

!疑问3,有没有更简单的,获取SSL_CTX的接口?

没有深入研究libwebsockets的内部实现。
我从你的日志中看到有这行错误:

D/WebSocket.cpp (167): ERR: Unable to load SSL Client certs file from C:UserscdrDownloadscacert.pem -- client ssl isn't going to work
```[quote="cdr12345, post:8, topic:45773, full:true"]
如果实在没办法使用 SSL_CTX_set_cert_verify_callback 设置屏蔽掉验证可以吗?不过,websocket中有没有获取SSL_CTX的接口?
[/quote]
目前WebSocket类还没有这个方法屏蔽的。[quote="cdr12345, post:7, topic:45773, full:true"]
而且,编译结果在其他电脑上运行没问题
[/quote]

只有在某些电脑上才出现证书验证错误?