La poignée de main d’ouverture Qt / OSX WebSocket a expiré

Je viens de développer une application dans Qt qui utilise un serveur WebSocket (QWebSocketServer). Je l’ai fait sous Linux et tout a bien fonctionné, mais lorsque j’ai exécuté le code sous Mac OS, je ne pouvais pas me connecter au serveur à partir d’une page Web sur Chrome.

La connexion a pris du temps, et après quelques minutes, Chrome a WebSocket opening handshake timed out .

Finalement, je suis retourné à l’essentiel et j’ai essayé l’exemple de Qt:

http://doc.qt.io/qt-5/qtwebsockets-sslechoserver-example.html

Exactement le même.

modifier:

Après la suppression de SSL et l’utilisation de websockets non sécurisés, cela fonctionne, même sur le même port.

Chrome sur Mac peut accéder à un serveur Qt WebSocket sécurisé sur un ordinateur distant (autre que Mac), mais la temporisation de Chrome sur un ordinateur distant est dépassée lors de la connexion au Mac (de manière sécurisée). Il semble donc que quelque chose ne va pas avec Qt QWebSocketServer. Exemple. Cela fonctionne bien sous Linux et Windows.

Une connexion est établie (car le navigateur Web échoue instantanément si l’application n’est pas en cours d’exécution ou est fermée), mais pour une raison quelconque, elle ne se termine pas.

Avez-vous une idée de ce que cela pourrait être ou de la façon dont je pourrais essayer de le retrouver?

Merci!

Comme le dit le document qt ( http://doc.qt.io/qt-5/qsslsocket.html ): Remarque: Le backend SSL de Secure Transport sur macOS peut mettre à jour le trousseau par défaut (le port par défaut est probablement votre trousseau de connexion) en important votre fichier local. certificates et clés. Cela peut également entraîner l’affichage de boîtes de dialog système et la demande d’autorisation lorsque votre application utilise ces clés privées. Si ce comportement n’est pas souhaité, définissez la variable d’environnement QT_SSL_USE_TEMPORARY_KEYCHAIN ​​sur une valeur autre que zéro. cela incitera QSslSocket à utiliser son propre trousseau temporaire.

Le problème ici semble être une interaction avec le système de permissions de MacOS.

La première fois que vous exécutez l’application et que vous vous connectez, l’application ouvre une fenêtre vous demandant les permissions d’access à votre trousseau (j’imagine pour installer le certificate).

Si vous fermez la boîte de dialog à ce moment-là, elle ne reviendra pas et il semblerait qu’aucun programme basé sur QtWebSocketServer ne fonctionnera à partir de ce moment-là, jusqu’à ce que vous redémarriez!