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)