繁体   English   中英

如何在Qt c ++中使用Secure WebSocket连接服务器

[英]How to connect with server using Secure WebSocket in Qt c++

我正在创建应该能够使用安全连接与服务器连接的Qt应用程序(即wss://xxx.xxx.xxx.xxx:8080),应用程序正常工作,没有安全连接(即ws:// xxx。 xxx.xxx.xxx:8443)。

我正在使用的协议是WebSocket。 我用过库来连接。

Qt Creator 3.4.2(opensource)基于Qt 5.5.0(MSVC 2013,32位)

QsslSocket :: supportsSsl()返回false ,然后发现我缺少openssl库文件( libeay32.dll,ssleay32.dll )然后我将这些文件放在我的应用程序的路径中并再次运行代码QSslSocket :: supportsSsl( )正在返回真实 但是,当我尝试连接websocket时,它显示出以下错误。

connect(&wsocket,SIGNAL(error(QAbstractSocket :: SocketError)),SLOT(onError(QAbstractSocket :: SocketError)),Qt :: DirectConnection); connect(&wsocket,SIGNAL(sslErrors(QList)),SLOT(onSslErrors(QList)),Qt :: DirectConnection);

onSslErrors:未知错误onError:“主机名与此证书的任何有效主机都不匹配”错误:QAbstractSocket :: SocketError(13)

来自客户端的代码片段(Qt)

void onConnectToServer()
{
   qRegisterMetaType<QAbstractSocket::SocketError>();
    qRegisterMetaType<QAbstractSocket::SocketState>();
    connect(&wsocket, SIGNAL(error(QAbstractSocket::SocketError)), SLOT(onError(QAbstractSocket::SocketError)), Qt::DirectConnection);
    connect(&wsocket, SIGNAL(sslErrors(QList<QSslError>)), SLOT(onSslErrors(QList<QSslError>)), Qt::DirectConnection);
    connect(&wsocket, SIGNAL(connected()), SLOT(onConnected()), Qt::DirectConnection);
    connect(&wsocket, SIGNAL(binaryMessageReceived(QByteArray)), SLOT(onBinaryMessage(QByteArray)), Qt::DirectConnection);
    connect(&wsocket, SIGNAL(textMessageReceived(QString)), SLOT(onTextMessage(QString)), Qt::DirectConnection);
    connect(&wsocket, SIGNAL(disconnected()), SLOT(onDisconnected()), Qt::DirectConnection);
    connect(&wsocket, SIGNAL(stateChanged(QAbstractSocket::SocketState)), SLOT(onStateChanged(QAbstractSocket::SocketState)), Qt::DirectConnection);

    QUrl serverURL;
    QWebSocket wsocket;

     // some code for here and setting **serverURL**

    wsocket.setPauseMode(QAbstractSocket::PauseNever);
    wsocket.open(serverURL);

}

void onSslErrors(const QList<QSslError> &errors)
{
    qDebug() << wsocket.errorString();
}

void onError(const QAbstractSocket::SocketError &socketError)
{
    qDebug() << wsocket.errorString() << " Error:" << socketError;
}

void onConnected()
{
    qDebug() << "Successfully Connected with " << serverURL;
}

void onDisconnected()
{
    qDebug() << wsocket.errorString() << " CloseCode is >>> " << wsocket.closeCode();
}

void onStateChanged(QAbstractSocket::SocketState socketState)
{
    qDebug() << "StateChanged : " << socketState;
}

如何解决这个问题,任何一个人都知道如何连接安全的Web套接字。 我确实检查了SSL Echo客户端示例,但似乎服务器端也应该是Qt WebSocket。

Q1)如何使用客户端的Qt进行安全连接?

注意:服务器端已配置为已进行安全连接。

Q2)服务器端不是Qt代码,客户端是Qt。 它是否在安全的Web套接字连接中? (即服务器套接字和客户端套接字是否独立于编程语言以进行连接?)

注意:我可以使用无安全连接与同一服务器连接。

我毕竟找到了解决方案,

在使用此行打开与远程服务器的连接之前,

wsocket.open(serverURL使用);

我添加了QSslConfiguration并忽略了用于开发的自签名证书的ssl错误,当然我将在生产中更正。

QSslConfiguration sslConfiguration = wsocket.sslConfiguration();
sslConfiguration.setPeerVerifyMode(QSslSocket::VerifyPeer);
wsocket.setSslConfiguration(sslConfiguration);
wsocket.ignoreSslErrors();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM