我有一個Qt應用程序,它以安全模式(SSL)運行帶有來自Letsencrypt的證書的QWebSocketServer。當我從Windows 10計算機上的Chrome或Edge進行連接時,一切正常。QWebSocketServer將不接受來自Windows的SSL連接Firefox
我使用這個工具來進行測試:https://www.websocket.org/echo.html
但是,當我在Windows 10,但是從Firefox連接不起作用,它運行在Linux上的Firefox在VMware的同一連接時不工作機。當它不起作用時,我的意思是沒有調用QWebSocketServer的回調函數:newConnection,acceptError,peerVerifyError,sslErrors或serverError(我實現了所有這些回調以嘗試調試它)。此外,在WebSocket的一面,我得到一些錯誤信息,幾秒鐘後:
ERROR: undefined
DISCONNECTED
我也試圖從我的Windows 10機器從不同的網絡位置連接。它的工作!但只有一段時間。經過多次審判之後,它多次和系統地失敗。
此外,我嘗試從一個不同的Windows 10機器,它的工作。但是,再次,只有少數審判和事後失敗,反覆和系統。
我嘗試沒有成功如下:
- 明確Firefox的緩存。
- 卸載並重新安裝Firefox(我正在使用版本52)。
- 運行Firefox Developer Edition。
- 從其他用戶帳戶運行Firefox。
- 重新啓動服務器計算機(Ubuntu 16.04)。
- 重新啓動客戶機(Windows 10)。
當我刪除我的QWebSocketServer中的安全模式時,一切都適用於非安全的WebSockets。
在服務器機器上,tcptrack顯示Firefox連接爲「ESTABLISHED」,但QWebSocketServer顯然沒有收到任何東西(沒有回調方法被調用)。
看來QWebSocketServer正在接收連接請求,但未能回答並調用任何錯誤回調方法(通過Qt信號)。
我想盡辦法瞭解問題所在。
接下來我可以嘗試什麼?
爲了進一步調查,我編譯了http://doc.qt.io/qt-5/qtwebsockets-sslechoserver-example.html,並用證書替換了證書和私鑰文件。相同的結果:從Chrome/Edge,而不是Firefox/Windows 10的作品。所以罪魁禍首不是我的應用程序。 –
我也在我的服務器機器上運行了帶有python和龍捲風的SSL websocket服務器(具有相同的證書和私鑰)。它可以在Firefox/Windows 10上運行,但不是Qt WebSocket SSL回顯服務器的例子。所以,它似乎是罪魁禍首... –
我在Ubuntu Linux 16上使用Qt 5.8.0。04(64位),剛剛發現了一個可能解決問題的錯誤報告:https://bugreports.qt.io/browse/QTBUG-57665 –