Qt&SSL,握手失败

Qt & SSL, Handshake failed

本文关键字:失败 SSL Qt      更新时间:2023-10-16

我有问题。我制作了一个连接到HTTPS网站的QT应用程序。在我的工作机器上,一切正常。当我尝试在干净的Windows 7机器上测试我的应用程序时,我观察到以下问题:

我安装了新鲜的Win7 Machine (安装了所有更新),启动我的应用程序后,我会得到 ssl握手失败错误,signal(sslerrors(qnetworkreply* qnetworkreply*,QLIST))发出两个空错误字符串和 error = qsslerror :: noError 。我真的在搜索整天为什么会发生这种情况,也可以通过示例 securesocketclient repares securesocketclient和域" google.com"来复制它。

现在,我发现,一旦我启动了Internet Explorer访问https://www.google.com,我的应用程序也可以按预期工作,并且没有进一步的握手错误。

顺便说一句,您要访问哪个站点都没关系 - 这与Google.com无关。

有人可以向我解释为什么会发生这种情况?它是OpenSSL还是QT或两者?

的错误

update

我找到了一种为自己解决这个问题的方法,实施以下忽略逻辑:

QSslError ignoreNOErrors(QSslError::NoError);
foreach(QSslError error, errors)
    if(error.error() != QSslError::NoError)
        qDebug() << error.errorString();
QList<QSslError> expectedSslErrors;
expectedSslErrors.append(ignoreNOErrors);
reply->ignoreSslErrors(expectedSslErrors);

谢谢

您可以使用qsslconfiguration :: setPeerVerifyMode()忽略证书验证:

QSslConfiguration conf = request.sslConfiguration();
conf.setPeerVerifyMode(QSslSocket::VerifyNone);
request.setSslConfiguration(conf);

我在Mac上遇到了同一问题,QT 5.5和5.6。当我升级到5.7时,它已解决。希望如果您仍在面对这个问题,可能会有所帮助。

请看一下此QT错误

[这是SO:D]

的填充