问题如下:在我的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