Qt& SSL,握手失败

时间:2014-02-07 20:00:58

标签: c++ qt ssl windows-7 openssl

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

安装全新Win7计算机(已安装所有更新)后,启动我的应用程序后,我收到 SSL握手失败错误,SIGNAL(sslErrors(QNetworkReply *) ,QList))发出两个空错误字符串和错误= QSslError :: NoError 。 我一整天都在搜索为什么会发生这种情况,也可以使用示例\ network \ securesocketclient \ release \ securesocketclient和域“google.com”重现它。

现在,我发现,一旦我启动了访问https://www.google.com的Internet Explorer,我的应用程序也按预期工作,不会再发生握手错误。

顺便说一句,您访问的网站并不重要 - 这与google.com无关。

有人可以向我解释为什么会这样吗?它是OpenSSL或Qt中的错误,还是两者兼而有之?

更新

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

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);

由于

3 个答案:

答案 0 :(得分:15)

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

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

答案 1 :(得分:1)

我在Mac上遇到了与Qt 5.5和5.6相同的问题。当我升级到5.7时,它就解决了。希望如果您仍然面临这个问题可能有所帮助。

答案 2 :(得分:0)

看看这个Qt bug

[这是SO:D的填充]