5

我正在尝试向证书自签名的网络服务发送休息请求。目前我正在创建一个请求,设置 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 - 证书是自签名的,不受信任

其次是网络错误nr 6:

请求失败并显示消息:SSL 握手失败

目前我忽略了所有错误,因为它似乎是唯一有效的东西。觉得脏。

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

编辑:

变成:

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

但仍然得到同样的错误......

4

2 回答 2

6

证书是自签名的,不受信任

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

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

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

于 2012-04-11T01:30:51.737 回答
0

阅读文档,您需要做的是在响应 QNetworkReply::sslErrors 信号的插槽上调用 ignoreSslErrors

于 2019-08-21T09:46:20.693 回答