问题 Qt&SSL,握手失败


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

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

现在,我发现,一旦我开始访问Internet Explorer https://www.google.com,我的应用程序也按预期工作,没有进一步的握手错误。

顺便说一句,您访问的网站并不重要 - 这与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);

谢谢


3705
2018-02-07 20:00


起源

好吧,似乎没有人有个好主意。如何添加根证书,如GeoTrust中的证书(geotrust.com/resources/root-certificates)使用进入套接字的CA证书数据库 qt-project.org/doc/qt-4.8/qsslsocket.html#addCaCertificate ?至少,这听起来像是一个合理的解决方法。任何想法? - inspector


答案:


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

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

14
2017-09-24 12:06



发生什么事?当我尝试连接到远程地址时遇到此问题,但它对localhost工作正常。 - jefferson ferreira palheta


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


1
2018-02-22 15:14





看看这个Qt 窃听器 

[这是SO:D的填充]


0
2018-03-09 08:44