我的问题
我将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。
答案 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小部件中运行。