【发布时间】:2014-03-05 09:28:41
【问题描述】:
我有问题。我制作了一个连接到 https 站点的 Qt 应用程序。 在我的工作机器上,一切正常。当我尝试在干净的 Windows 7 机器上测试我的应用程序时,我发现了以下问题:
在我安装了新的 Win7 机器(安装了所有更新)后,在启动我的应用程序后,我收到 SSL Handshake failed 错误,SIGNAL(sslErrors(QNetworkReply* ,QList)) 发出两个空错误字符串和 error = QSslError::NoError。 我真的整天都在寻找为什么会发生这种情况,也可以用 examples\network\securesocketclient\release\securesocketclient 和域“google.com”重现它。
现在,我发现,一旦我启动 Internet Explorer 访问 https://www.google.com,我的应用程序也会按预期工作,并且不会出现进一步的握手错误。
顺便说一句,您访问的网站无关紧要 - 这与 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);
谢谢
【问题讨论】:
-
好吧,似乎没人有好主意。使用qt-project.org/doc/qt-4.8/qsslsocket.html#addCaCertificate 将根证书(例如来自 GeoTrust (geotrust.com/resources/root-certificates) 的根证书添加到套接字的 CA 证书数据库中怎么样?至少,这听起来像是一个合理的解决方法。有什么想法吗?
标签: c++ qt ssl windows-7 openssl