Qt&SSL,握手失败

ins*_*tor 12 c++ ssl qt openssl windows-7

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

在我安装了一台新的Win7机器(安装了所有更新)之后,在启动我的应用程序后,我收到SSL握手失败错误,SIGNAL(sslErrors(QNetworkReply*,QList))发出两个空错误字符串并且 error = QSslError :: NoError.我一整天都在搜索为什么会发生这种情况,也可以使用examples \network\securesocketclient\release\securesocketclient和domain"google.com"重现它.

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

顺便说一下,您访问的网站并不重要 - 这与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);
Run Code Online (Sandbox Code Playgroud)

谢谢

Lib*_* B. 17

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

QSslConfiguration conf = request.sslConfiguration();
conf.setPeerVerifyMode(QSslSocket::VerifyNone);
request.setSslConfiguration(conf);
Run Code Online (Sandbox Code Playgroud)