奇怪的Qt SSL问题 – 错误“没有错误”出现,没有别的,如果我忽略它,一切正常

问题如下:在我的Qt应用程序中,我有一个QWebView,我用它来加载HTTPS页面。

在我的开发机器上一切正常,所以我现在试图让它在testing机器上运行。 我运行的应用程序,但页面没有加载(QWebView是空白的)。 经过多次debugging,我发现问题是出现SSL错误,sslErrors()信号被触发。

这是我的sslErrors()处理代码:

void blah::sslErrors(QNetworkReply *reply, const QList<QSslError> &errors) { foreach(QSslError error, errors) { qDebug() << error.errorString() << endl; } reply->ignoreSslErrors(); } 

上面的代码打印的唯一的是:

 "No error" 

所以没有错误,但除非我调用reply->ignoreSslErrors() ,否则页面不会加载(在testing机器上,在我的开发人员计算机上没有错误报告)。 咦? 这是一个错误?

如果确定它是“没有错误”的types,忽略错误是安全的吗?

只有在翻译OpenSSL X509_V_OK错误时, QSslSocket 才会生成NoError SslError。

OpenSSL文档报告 :

如果没有提供对等证书,返回的结果代码是X509_V_OK。 这是因为没有验证错误发生,但它并不表示成功。

您应该使用tcpdump或类似的工具来检查证书是否在对等方之间正确交换。

你可能会碰到QTBUG-28343,这是由于你的Qt编译版本与你正在运行的版本之间的openssl中的二进制不兼容。 这将在Qt 4.8.5中修复。

http://lists.qt-project.org/pipermail/announce/2013-January/000020.html https://bugreports.qt-project.org/browse/QTBUG-28343