gpt4 book ai didi

qt - 如何在基于 Qt 的 TCP 服务器 - 客户端应用程序中忽略 SSL 错误

转载 作者:可可西里 更新时间:2023-11-01 02:48:41 25 4
gpt4 key购买 nike

我正在实现使用 TCP 进行通信的客户端-服务器应用程序。我想使用 SSL 来提高安全性,但我需要使客户端甚至可以连接到具有自签名或“不是很安全”证书的服务器。现在我创建了一些随机测试证书,并尝试在我的本地机器上使用它(服务器和客户端都在那里运行,无法完成服务器主机解析,它只是本地主机)。

我一直在客户端收到此错误:

Socket error: The host name did not match any of the valid hosts for this certificate

我试图通过使用以下代码来抑制这种情况:

    // We don't care about self signed certificates
QList<QSslError> errors;
errors << QSslError(QSslError::SelfSignedCertificate);
errors << QSslError(QSslError::HostNameMismatch);
((QSslSocket*)this->socket)->ignoreSslErrors(errors);
((QSslSocket*)this->socket)->connectToHostEncrypted(this->hostname, this->port);

但是它不起作用,无论我是在连接之前还是之后使用此代码,它仍然会因为“不匹配”错误而失败。

我如何告诉 QSslSocket“亲爱的套接字,我根本不关心证书是自签名的还是与有效主机不匹配,请连接我”?

最佳答案

所以,我想通了:

仅当您在类的构造函数中指定证书时,带参数的 ignoreSslErrors 才有效。

另一种方法是不带参数调用 ignoreSslErrors()。但是,需要从连接到信号 sslErrors 的 Qt 插槽调用此函数。没有解释为什么它所要求的似乎无法以任何其他方式工作。

文档:http://doc.qt.io/qt-5/qsslsocket.html#ignoreSslErrors-1

工作示例

void Program::OnSslHandshakeFailure(QList<QSslError> errors)
{
this->socket->ignoreSslErrors();
}

void Program::Connect()
{
connect(this->socket, SIGNAL(sslErrors(QList<QSslError>)), this, SLOT(OnSslHandshakeFailure(QList<QSslError>)));
this->socket->connectToHostEncrypted(this->hostname, this->port);
}

关于qt - 如何在基于 Qt 的 TCP 服务器 - 客户端应用程序中忽略 SSL 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33344845/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com