QT QSslError通过设置为NoError的错误代码发出信号

时间:2010-08-08 16:10:59

标签: qt ssl openssl

我的问题
我将OpenSSL编译成QT以支持OpenSSL。在编译中,一切似乎都正确。

但是,当我尝试使用可以found here的官方HTTP示例应用程序时,每当我尝试下载https页面时,它都会发出两个QSslError信号,每个都有内容NoError。

QSslErrors的类型,包括NoError,是documented here,很差。没有解释为什么他们甚至包括一个名为NoError的错误类型,或者它意味着什么。

奇怪的是,NoError错误代码似乎是正确的,因为它甚至在发出错误信号时也能完美地下载远程https文档。

有没有人知道这意味着什么以及可能导致什么呢?

可选背景阅读
以下是示例应用程序代码的相关部分(它由构造函数连接到网络连接的sslErrors信号):

void HttpWindow::sslErrors(QNetworkReply*,const QList<QSslError> &errors)
{
 QString errorString;
 foreach (const QSslError &error, errors) {
     if (!errorString.isEmpty())
         errorString += ", ";
     errorString += error.errorString();
 }

 if (QMessageBox::warning(this, tr("HTTP"),
                          tr("One or more SSL errors has occurred: %1").arg(errorString),
                          QMessageBox::Ignore | QMessageBox::Abort) == QMessageBox::Ignore) {
     reply->ignoreSslErrors();
 }
}

我尝试过这个例子的旧版本,它产生了相同的结果。

我尝试过OpenSSL 1.0.0a和0.9.8o。我试过尝试自己编译OpenSSL,我尝试过从网上使用预编译的OpenSSL版本。所有都产生相同的结果。

如果这是我第一次使用QT和SSL,我几乎认为这是预期的结果(即使他们的示例应用程序弹出错误警告消息窗口),如果不是因为上次我玩QT的事实使用旧版本的SSL现在使用的旧版QT,我清楚地记得一切正常,没有错误窗口。

我的系统运行的是Windows 7 x64。

2 个答案:

答案 0 :(得分:1)

当错误代码为NoError时,使用X509_V_OK代码构造QSslError的唯一路径为during conversion from OpenSSL error codes to QSslError::SslError values。 OpenSSL文档中有an interesting note about this error code

  

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

如果正在传输证书,您可以查看Wireshark或类似内容吗?

答案 1 :(得分:1)

我得到4个错误,3次错误。 4(预期)错误是: 1.主机名与此证书的任何有效主机都不匹配 2.找不到本地查询证书的颁发者证书 3.为此,不信任根CA证书 4.无证书可以验证

我怀疑你的“NoError”指的是最后一个(#4)......

我得到3次重复的原因似乎是因为有3个线程正在运行 - 每个线程都会触发相同的sslErrors信号。

我怀疑你的2次重复是由于2个线程在WebView小部件中运行。