我有问题。我已经制作了一个连接到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);
由于
答案 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的填充]