- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我需要与需要本地证书(.crt 文件)的服务器交换数据。我试试这个:
loginRequest = QNetworkRequest(QUrl("https://somesite.com/login"));
QSslConfiguration sslConf = loginRequest.sslConfiguration();
QList<QSslCertificate> certs = QSslCertificate::fromPath(Preferences::certificatePath());
qDebug() << certs.first().issuerInfo(QSslCertificate::Organization); // prints name
sslConf.setLocalCertificate(certs.first());
qDebug() << "is valid " << sslConf.localCertificate().isValid(); // true
qDebug() << "is null " << sslConf.localCertificate().isNull(); // false
qDebug() << "protocol " << sslConf.protocol(); // 0
sslConf.setProtocol(QSsl::SslV3); // i also tried Qssl::AnyProtocol
qDebug() << "protocol " << sslConf.protocol(); // 0
// if i uncomment these i expect everithing to work
//QSslConfiguration::setDefaultConfiguration(sslConf);
//QSslSocket::addDefaultCaCertificate(certs.first());
//loginRequest.setSslConfiguration(sslConf);
QObject::connect(connectionManager, SIGNAL(sslErrors(QNetworkReply*,QList<QSslError>)), this, SLOT(printSslErrors2(QNetworkReply*,QList<QSslError>)));
m_reply = connectionManager->get(loginRequest);
QObject::connect(m_reply, SIGNAL(readyRead()), this, SLOT(getCookie()));
QObject::connect(m_reply, SIGNAL(sslErrors(QList<QSslError>)), this, SLOT(printSslErrors(QList<QSslError>)));
执行此代码时,我在 WireShark 中收到以下消息(过滤器:tcp && ssl && ip.addr == my_addr):
Client Hello
ServerHello, Certificate
Server Key Exchange, Certificate request, Server Hello Done
Alert (level: Warning, Description: no certificate), client key exchange, change cipher spec, encrypted handshake message
Alert (level: Fatal, Description: Handshake failure)
这是预期的 - 应用证书的代码被注释掉了,但奇怪的是 - 我没有从我的 QNetworkAccessManager 和 QNetworkReply(插槽 printSslErrors 和 printSslErrors2)中收到任何 ssl 错误。
如果我取消注释这 3 行中的任何一行:
//QSslConfiguration::setDefaultConfiguration(sslConf);
//QSslSocket::addDefaultCaCertificate(certs.first());
//loginRequest.setSslConfiguration(sslConf);
我在 wireshark 中一无所获(很少有 SYN、ACK 和 FIN tcp 消息,但没有 http 或 ssl 流量)。此外,QNetworkAccessManager 和 QNetworkReply 仍然没有错误,所以我不知道出了什么问题。
有没有机会让 Qt 接受我的本地证书,或者可能有一些 3d party 面向 qt 的库可以帮助我?
P.S.:顺便说一句 - 在服务器更改为需要客户端证书之前,几天前 ssl 和 https 工作得很好。
P.P.S.:证书是自签名的,如果有任何区别的话。我还尝试将它(p12 文件)“安装”到系统中,Chrome 和 IE7 都可以使用它并与服务器通信。
最佳答案
在黑暗中完成拍摄并继续假设 Qt 实际上可能报告错误但您没有收到信号。
您正在连接来自 connectionManager
的信号至 this
你包括了Q_OBJECT
吗this
header 中的宏?
在运行应用程序时还要检查输出,因为 Qt 可能会报告连接信号/槽的问题(如果确实如此)。
关于c++ - 带有 ssl 本地证书的 QNetworkRequest,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7506223/
我在 QNetworkRequest 的文档中找到了 QNetworkRequest::User 和 QNetworkRequest::UserMax ,但根据找到的解释,我无法理解每一个的含义。 每
我正在使用 Qt 与 GraphQL 主机交互。我正在使用 QNetworkRequest,登录过程完成得很好,给了我一个 JSON 格式的 token。从那时起,GraphQL 期望 token 位
我想测试对网络服务器的异步请求。为此,我正在创建一个简单的单元测试来快速尝试几行代码: void AsynchronousCall::testGet() { QNetworkAccessMan
我试图获取网页的内容,所以我解析了所有的 div 并创建了一个文本文件,这里是我的起始代码, #include #include #include
我有一个 Qt 应用程序,我在 Windows 7 x64 SP1 下使用 Qt 4.8.1 进行部署,但使用 32 位编译。该应用程序使用 QNetworkAccessManager、QNetwor
我必须使用 post 到 google 脚本(见下文),我希望在脚本的末尾收到反馈,表明一切正常。 function doPost(e){ var idm = e.parameter.idm;
有什么方法可以在客户端调用 QNetworkAccessManager::post(QNetworkRequest,QByteArray) 期间(或之后)查看将发送(或已经发送)的数据? 换句话说,我
如何阻止 QNetworkRequest 在 put/post 到 HTTPS 连接期间缓冲 QIODevice 的全部内容?发布到 HTTP 时它工作正常,但 HTTPS 导致在发布开始之前将整个文
我有一段在 4.8 中工作的代码,但现在我需要将它移植到 Qt5 (beta2) 这是应该发生的事情: 我想将一些数据发布到网络服务器,网址应如下所示“http://server/actions.ph
我可以在 C# 中轻松获得异步设计 HttpResponseMessage response = await httpClient.GetAsync(InputAddress.Text); {
我需要在 QNetworkRequest 中附加多个 header 请求。我怎样才能做到这一点? 例如下面是我的 URL 和所需的 header : www.abc.com?identifier=13
我正在使用以下代码向服务器发出 HTTPS 请求。 QNetworkRequest request; //request.setSslConfiguration(QSslConfiguration::
我需要与需要本地证书(.crt 文件)的服务器交换数据。我试试这个: loginRequest = QNetworkRequest(QUrl("https://somesite.com/login")
我想用 Qt 构建自定义 SOAP-Request。对于我的特定 SOAP 操作数据包,我需要删除自动出现在 QNetworkrequest 中的 Accept-Language header 。 拥
我的 Qt 小部件应用程序中有一个 QWebView 组件。我已经创建了一个网络管理器来处理来自 QWebView 的请求。 我想做的是在 QWebView 中捕获网络表单的值,到目前为止,我有每个网
我有一个 QWebView,我创建了一个 QNetworkDiskCache 并设置了它。现在我想确保所有 QNetworkRequests 总是使用 PreferCache 而不是 PreferNe
我一直在努力使 Twitter API 的应用程序唯一身份验证在 Qt 上工作。当我运行我的代码时,出现此错误: Failure "Error transferring https://api.twi
我正在使用以下函数发出发布请求: bool NewAccountDialog::verifyAccount() { QString loginURL = "https://accounts.c
我最近开始了对大约 2 个月前编写的大型单片音频播放器应用程序进行模块化的繁琐过程。 这个过程进行得相当顺利,尽管其中一种方法(ScrobbleMedia - 可以预见的是它会发出 HTTP 请求以将
我正在尝试连接到 gmail 并使用 atom 文件。我对包含 !#$%^&* 字符的密码有疑问。 pNetworkManager = new QNetworkAccessManager(th
我是一名优秀的程序员,十分优秀!