Qt QSslSocket comodo正ssl
我在apache上安装了一个真正的comodo正片ssl证书,并通过站点检查了正确的安装 带证书的工具包中有5个文件Qt QSslSocket comodo正ssl,qt,certificate,qsslsocket,Qt,Certificate,Qsslsocket,我在apache上安装了一个真正的comodo正片ssl证书,并通过站点检查了正确的安装 带证书的工具包中有5个文件 AddTrust_External_CA_Root.crt COMODO_RSA_Certification_Authority.crt sslserver.crt sslserver.key sslserver.ca-bundle 当我试图通过控制台中的chrome连接到我的服务器时,出现以下错误: WebSocket连接到'wss://192.165.10.70:5870/
AddTrust_External_CA_Root.crt
COMODO_RSA_Certification_Authority.crt
sslserver.crt
sslserver.key
sslserver.ca-bundle
当我试图通过控制台中的chrome连接到我的服务器时,出现以下错误:
WebSocket连接到'wss://192.165.10.70:5870/'失败:中出现错误
连接建立:网络::错误证书公用名称无效
在服务器端:
现在收听0.0.0.0:5870(“科摩多CA有限公司”)(“科摩多RSA
域验证安全服务器(CA)(“GB”)新连接
peerCertificate QSslCertificate(“,”,“1B2C1Y8AsgApgBmY7PhCtg=”,
(),(),QMap(),QDateTime(无效),QDateTime(无效))
外名“
加密数据
加密的
错误“远程主机已关闭连接”
错误:无法接收消息(远程主机关闭了
连接)
js客户端:
<script type="text/javascript">
let socket = new WebSocket("wss://192.165.10.70:5870");
socket.onmessage = function(response) {
console.log(response.data);
}
socket.onopen = function() {
socket.send("hi");
}
socket.onclose = function(e) {
if(e.wasClean) {
console.log('Close server connect');
}
else {
console.log('connect fail');
}
console.log('error: ' + e.code + ' reason: ' + e.reason);
}
socket.onerror = function(err) {
console.log('error: '+err.message);
}
</script>
让套接字=新的WebSocket(“wss://192.165.10.70:5870");
socket.onmessage=函数(响应){
console.log(response.data);
}
socket.onopen=函数(){
socket.send(“hi”);
}
socket.onclose=函数(e){
如果(如清洁){
log(“关闭服务器连接”);
}
否则{
console.log('connectfail');
}
console.log('错误:'+e.code+'原因:'+e.reason);
}
socket.onerror=函数(err){
console.log('error:'+err.message);
}
Qt:
void服务器示例::run()
{
QHostAddress地址=QHostAddress::任意;
16端口=5870;
SslServer SslServer;
sslServer.setSslLocalCertificate(“C:\\Users\\Adm\\Documents\\Server\\sslServer.pem”);
sslServer.setSslPrivateKey(“C:\\Users\\Adm\\Documents\\Server\\sslServer.key”);
sslServer.setSslProtocol(QSsl::TlsV1_2);
if(sslServer.listen(地址、端口))
qDebug().nospace()您的客户端使用websocket并尝试连接到SSL套接字服务器?我认为您的服务器应该基于QWebSocketServer。请看下面的示例:我尝试使用sslsocket作为替代方案,但实际上我使用QWebSocketServer,我成功地通过ws-client连接到我的服务器,问题从wss协议开始,经过con连接到服务器端,没有错误,在客户端“失败:WebSocket开放握手超时”客户端错误:1006我按照示例做了所有事情
void ServerExample::run()
{
QHostAddress address = QHostAddress::Any;
quint16 port = 5870;
SslServer sslServer;
sslServer.setSslLocalCertificate("C:\\Users\\Adm\\Documents\\Server\\sslserver.pem");
sslServer.setSslPrivateKey("C:\\Users\\Adm\\Documents\\Server\\sslserver.key");
sslServer.setSslProtocol(QSsl::TlsV1_2);
if (sslServer.listen(address, port))
qDebug().nospace() << "Now listening on " << qPrintable(address.toString()) << ":" << port;
else
qDebug().nospace() << "ERROR: could not bind to " << qPrintable(address.toString()) << ":" << port;
if (sslServer.waitForNewConnection(-1)) // Wait until a new connection is received, -1 means no timeout
{
qDebug() << "New connection";
QSslSocket *sslSocket = dynamic_cast<QSslSocket*>(sslServer.nextPendingConnection());
qDebug() << "peerCertificate " << sslSocket->peerCertificate();
qDebug() << "peerName " << sslSocket->peerName();
QObject::connect(sslSocket, &QSslSocket::encrypted, [](){
qDebug() << "encrypted";
});
if (sslSocket->waitForReadyRead(-1))
{
QByteArray message = sslSocket->readAll();
qDebug() << "Message:" << QString(message);
sslSocket->disconnectFromHost();
sslSocket->waitForDisconnected();
qDebug() << "Disconnected";
}
else
{
qDebug().nospace() << "ERROR: could not receive message (" << qPrintable(sslSocket->errorString()) << ")";
}
}
else
{
qDebug().nospace() << "ERROR: could not establish encrypted connection (" << qPrintable(sslServer.errorString()) << ")";
}
this->deleteLater();
QThread::currentThread()->quit();
qApp->exit();
}
void SslServer::incomingConnection(qintptr socketDescriptor)
{
QSslSocket *sslSocket = new QSslSocket(this);
sslSocket->setSocketDescriptor(socketDescriptor);
qDebug() << m_sslLocalCertificate.issuerInfo(QSslCertificate::Organization);
qDebug() << m_sslLocalCertificate.issuerInfo(QSslCertificate::CommonName);
qDebug() << m_sslLocalCertificate.issuerInfo(QSslCertificate::CountryName);
sslSocket->setLocalCertificate(m_sslLocalCertificate);
sslSocket->setPrivateKey(m_sslPrivateKey);
sslSocket->setProtocol(m_sslProtocol);
sslSocket->setPeerVerifyMode(QSslSocket::VerifyNone);
sslSocket->startServerEncryption();
QObject::connect(sslSocket, &QSslSocket::encrypted, [=](){
qDebug() << "encrypted data";
});
QObject::connect(sslSocket, static_cast<void (QSslSocket::*)(QAbstractSocket::SocketError)>(&QAbstractSocket::error), [sslSocket] (QAbstractSocket::SocketError) {
qDebug()<< "ERROR " << sslSocket->errorString();
});
QObject::connect(sslSocket, &QSslSocket::peerVerifyError, [sslSocket](QSslError err){
qDebug()<< "ERROR " << err.errorString();
});
QObject::connect(sslSocket, SIGNAL(sslErrors(const QList<QSslError> &)), this, SLOT(sslErrorst(const QList<QSslError> &)));
connect(sslSocket, &QSslSocket::hostFound, [](){
qDebug() << "host";
});
this->addPendingConnection(sslSocket);
}