c++ - QSslError : The certificate is self-signed, 和不受信任

标签 c++ qt ssl qnetworkaccessmanager

我正在尝试向证书自签名的网络服务发送休息请求。目前我正在创建一个请求,设置 url 和 auth。键作为标题。然后我告诉回复忽略这个 ssl 错误:

QSslError error(QSslError::SelfSignedCertificate);
QList<QSslError> expectedSslErrors;
expectedSslErrors.append(error);

QNetworkReply *reply = _accessManager.put(request, ""); // no requestbody
reply->ignoreSslErrors(expectedSslErrors);

当我运行它时,出现以下 ssl 错误:

9 - The certificate is self-signed, and untrusted

后跟网络错误 6:

Request failed with message: SSL handshake failed

目前我忽略了所有错误,因为它似乎是唯一有效的方法。感觉很脏。

如果有人知道我做错了什么,将不胜感激!

编辑:

更改为:

QList<QSslError> expectedSslErrors;
expectedSslErrors.append(QSslError::SelfSignedCertificate);
expectedSslErrors.append(QSslError::CertificateUntrusted);
reply->ignoreSslErrors(expectedSslErrors);

但是还是报同样的错误...

最佳答案

The certificate is self-signed, and untrusted

问题是“不受信任”的部分。 您必须提供自签名证书,作为 QSslError 的第二个参数。

编辑:根据源代码,实际收到的 SSL 错误与传递给 ignoreSslErrors 的错误之间的比较是通过比较错误代码和证书。
因此,如果 OpenSSL 返回的错误包含证书,例如 QSslError::SelfSignedCertificate,您必须始终将证书传递给 QSslError 构造函数,或者比较会失败。

但是您也可以通过将信号 sslError() 连接到一个插槽来手动忽略错误,您可以在其中检查错误列表是否仅包含自签名证书错误,然后调用 ignoreSslErrors ()(不带任何参数)。

关于c++ - QSslError : The certificate is self-signed, 和不受信任,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10097250/

相关文章:

c++ - ...(省略号)作为函数原型(prototype)中唯一的函数参数在 C++ 中意味着什么?

c++ - 在 Qt 中保存和恢复带有图像的 QLabel

linux - 如何在另一台安装了qt的计算机(linux)上运行qt程序?

qt - 如何在不缩放的情况下显示/遮盖图像的一部分-QtQuick/QML

apache - 强制 HTTP 重定向到 HTTPS 会忽略子域

c++ - 什么是 CMAKE_CXX_FLAGS 以及哪些可用

c++ - 什么情况会导致对 C++ 代码的原始变量的天真搜索失败?

c++ - 某些 boost::asio 异步函数是否将处理程序连接到操作以便处理程序被触发一次?

ssl - 如何使用通用命令强制所有网站/单个域使用 HTTPS?

java - 使用 SSLEngine 在 NIO SSL 握手过程中抛出异常