Я работаю над приложением Qt, которое связывается с моим веб-браузером (в настоящее время Google Chrome) через WebSocket.
Все работало нормально, пока я не попытался использовать защищенные websockets...
Мне удалось решить проблемы с OpenSSL, поэтому теперь у меня должно быть рабочее приложение Qt, но я этого не делаю.
Я использую VS2013 и Qt 5.3. У меня есть следующий код для запуска моего сервера:
MyClass::MyClass (quint16 port, QObject *parent) :
QWebSocketServer("Press And Listen Server", QWebSocketServer::SecureMode, parent) {
QSslConfiguration sslConfiguration;
QFile certFile (QStringLiteral ("localhost.crt"));
QFile keyFile (QStringLiteral ("localhost.key"));
certFile.open (QIODevice::ReadOnly);
keyFile.open (QIODevice::ReadOnly);
QSslCertificate certificate (&certFile, QSsl::Pem);
QSslKey sslKey (&keyFile, QSsl::Rsa, QSsl::Pem);
certFile.close ();
keyFile.close ();
sslConfiguration.setPeerVerifyMode (QSslSocket::VerifyNone);
sslConfiguration.setLocalCertificate (certificate);
sslConfiguration.setPrivateKey (sslKey);
sslConfiguration.setProtocol (QSsl::TlsV1SslV3);
this->setSslConfiguration (sslConfiguration);
if (!this->listen (QHostAddress::Any, port)) {
throw ServerNotStartedException () ;
}
qDebug () << "Server listenning on: " << port ;
connect (this, &QWebSocketServer::newConnection, this, &MyClass::onNewConnection);
connect (this, &QWebSocketServer::closed, this, &MyClass::onClose);
connect (this, &QWebSocketServer::sslErrors, this, &MyClass::onSslErrors);
}
Я создал файлы сертификатов, используя следующий метод: https://developer.salesforce.com/blogs/developer-relations/2011/05/generating-valid-self-signed-certificates.html
В браузере у меня есть только:
var websock = websock = new WebSocket('wss://localhost:52132');
websock.onerror = function (error) {
console.log('Press & Listen, WS Error: ' + error);
};
websock.onopen = function () {
console.log('Open!');
};
К сожалению, каждый раз, когда я пытался, я получил следующее сообщение JS:
WebSocket connection to 'wss://localhost:52132/' failed: Error in connection establishment: net::ERR_TIMED_OUT
До сих пор:
-
QSslSocket::supportsSsl ()
возвращаетtrue
- У меня нет сообщений
QSslSocket: cannot resolve XXX method
-
Загружаются DLL OpenSSL, VS2013 выводят следующие сообщения:
'MyProject.exe' (Win32): Загружен 'I:\Sources\VS2013\x64\Release\ssleay32.dll'. Не удается найти или открыть файл PDB. 'PressAndListenQt.exe' (Win32): Загружен 'I:\Sources\VS2013\x64\Release\libeay32.dll'. Не удается найти или открыть файл PDB.
Я не знаю, как найти то, что неправильно, поэтому я открыт для любого предложения!
Изменить: Я попытался создать самозаверяющий сертификат, используя следующее (вместо ссылки выше):
openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 100 -nodes
Теперь я получаю еще одну ошибку:
WebSocket connection to 'wss://localhost:52132/' failed: WebSocket opening handshake was canceled