Qt忽略SSL错误

时间:2014-06-09 14:50:43

标签: qt ssl signals-slots

我已经看过在Qt中忽略SSL握手错误的几种不同尝试,但我没有工作。我正在使用自签名证书,在开发过程中,我只想忽略任何错误,以防我必须更改证书或其他事情。

我看了看:

Suppressing SSL errors

http://qt-project.org/doc/qt-5/qnetworkaccessmanager.html#sslErrors

https://qt-project.org/forums/viewthread/17456

Weird Qt SSL issue -- error "No Error" shows up, nothing else, and if I ignore it, everything works

http://www.qtcentre.org/threads/48736-Ignore-SSL-Errors

http://developer.nokia.com/community/wiki/How_to_ignore_ssl_errors_to_get_https_website_work_on_QML_Webview

http://xizhizhu.blogspot.se/2010/08/basic-samples-for-ssl-communication.html

这是我的请求代码

mManager = new QNetworkAccessManager(this);
... // adding onRequestComplete slot and creation of postdata and request
QObject::connect(mManager, SIGNAL(sslErrors(QNetworkReply*,QList<QSslError>)), this, SLOT(onSslError(QNetworkReply*, QList<QSslError>)));

QNetworkReply *reply = mManager->post(request, postData);
//QObject::connect(reply, SIGNAL(sslErrors(QList<QSslError>)), this, SLOT(onSslError(QList<QSslError>)));

如您所见,我已尝试连接到networkmanager信号和回复信号。这是我的插槽:

void onSslError(QList<QSslError> errors) {
    QNetworkReply *reply = qobject_cast<QNetworkReply *>(sender());
    reply->ignoreSslErrors();
}

void onSslError(QNetworkReply* r, QList<QSslError> l) {
    r->ignoreSslErrors();
}

当我制作一个正常的HTTP请求时,工作正常。将请求中的QUrl更改为https会导致我的问题。我在onRequestComplete插槽中遇到的错误是&#34;无法启动SSL上下文&#34;。

我已尝试在两个广告位中设置断点,并且它们从不触发,而且在我看来,ignoreSslErrors调用永远不会被执行。非常感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

最好以这种方式使用它:

QList<QSslError> errorsThatCanBeIgnored;

errorsThatCanBeIgnored<<QSslError(QSslError::HostNameMismatch,cert);
errorsThatCanBeIgnored<<QSslError(QSslError::SelfSignedCertificate,cert);

ignoreSslErrors(errorsThatCanBeIgnored);

答案 1 :(得分:1)

似乎我必须安装openssl。

现在正常工作:http://codeblog.vurdalakov.net/2009/11/solution-qsslsocket-cannot-call.html