带有 ssl 本地证书的 QNetworkRequest

2023-12-14

我需要与需要本地证书(.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 中收到任何 ssl 错误(插槽 printSslErrors 和 printSslErrors2)。

如果我取消注释这三行中的任何一行:

 //QSslConfiguration::setDefaultConfiguration(sslConf);
 //QSslSocket::addDefaultCaCertificate(certs.first());
 //loginRequest.setSslConfiguration(sslConf);

我在wireshark 中什么也没有得到(很少有SYN、ACK 和FIN tcp 消息,但没有http 或ssl 流量)。另外,QNetworkAccessManager 和 QNetworkReply 仍然没有错误,所以我不知道出了什么问题。

有没有机会让 Qt 接受我的本地证书,或者可能有一些 3d 方面向 qt 的库来帮助我?

P.S.:顺便说一句 - 几天前,在服务器更改为需要客户端证书之前,ssl 和 https 工作得很好。

P.P.S.:如果有任何区别,证书是自签名的。我还尝试将它(p12 文件)“安装”到系统中,Chrome 和 IE7 都能够使用它并与服务器通信。


完全在黑暗中拍摄,并假设 Qt 实际上可能报告错误,但您没有收到信号。

您正在连接来自您的信号connectionManager to this你有包括吗Q_OBJECT标题中的宏this?

运行应用程序时还要检查输出,因为如果确实是这种情况,Qt 可能会报告连接信号/槽的问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

带有 ssl 本地证书的 QNetworkRequest 的相关文章

  • 使用 Json.NET 序列化子类

    我正在尝试使用 Json NET 序列化子类 生成的 json 包含超类的序列化属性 但是not子类对象的属性 这似乎与我发现的一个问题有关这里就这样 https stackoverflow com q 5863496 498969 但必须
  • 自动映射器多对多 stackoverflowException

    我遇到以下映射的堆栈溢出 Mapper CreateMap
  • 深拷贝和动态转换 unique_ptr

    假设我有一个如下所示的类 class A virtual A class B public A class C public A 我还有一个 unique ptr 向量 它是这样声明的 std vector
  • NDK 应用 onDestroy 清理 - 如何 DetachCurrentThread

    因此 如果我们连接 我们必须在完成后分离线程 对吗 JNIEnv get jni env JNIEnv res JAVA VM gt GetEnv void res JNI VERSION 1 6 Using cached JavaVM J
  • 平滑手绘曲线

    我有一个允许用户绘制曲线的程序 但这些曲线看起来不太好 它们看起来摇摇欲坠 而且是手绘的 所以我想要一种能够自动平滑它们的算法 我知道平滑过程中存在固有的模糊性 因此它不会每次都完美 但这种算法似乎确实存在于多个绘图包中 并且它们工作得很好
  • 使用 C# 将多个音频样本混合到单个文件中

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个能够创建音频文件 mp3 或 wav 的库 NAudio http www codeple
  • Monotouch全局异常处理

    我在野外发现了一只令人讨厌的虫子 但我无法确定它的具体情况 有没有办法拥有全局 Try Catch 块 或者有办法处理 Monotouch 中未处理的任何异常 我可以包起来吗UIApplication Main args 在 try cat
  • 如何将 Q 格式整数转换为浮点数(反之亦然)?

    我四处搜寻 找不到一个很好的问题来回答这个问题 给定一个整数 使用Q Format https en wikipedia org wiki Q number format 如何将该数字转换为普通浮点类型 反之亦然 如何将浮点类型转换为Q F
  • 如何自定义 Google 测试失败消息?

    我编写了一个如下所示的 Google 测试 它将一些计算值与 CSV 文件中预期存储的值进行比较 class SampleTest public testing Test public void setupFile const std st
  • 我在使用 ado.net 时收到错误 Argument 2 may not be pass with ref keywords

    int t 0 cmd Parameters AddWithValue Res ref t 我在第二行收到错误 参数 2 不能与 ref 关键字一起传递 您只能通过引用传递参数ref if the 范围 is a ref参数也是如此 Add
  • 如何从外语线程调用Python函数(C++)

    我正在开发一个程序 使用 DirectShow 来抓取音频数据 媒体文件 DirectShow 使用线程将音频数据传递给回调 我的程序中的函数 然后我让该回调函数调用另一个函数 Python 中的函数 我使用 Boost Python 来包
  • 在 C# 中使用命名空间别名有什么好处? [复制]

    这个问题在这里已经有答案了 使用命名空间别名有什么好处 仅仅是为了简化编码吗 仅当与类发生冲突时我才使用名称空间别名 对我来说 这根本没有简化 我的意见是 如果没有必要 就不要使用
  • 使用数据绑定,如何将包含表情符号的文本绑定到标签并使其正确显示?

    我正在编写一个应用程序来连接 WordPress BuddyPress API 该应用程序将允许用户通过 API 相互发送消息 当这些消息包含表情符号时 我很难正确显示它们 以下是 API 返回的消息文本的简短示例 Hi x1f642 ho
  • 传递数组时在 C 中的函数参数中强制指定数组大小

    Context 在 C 中 我有一个以数组作为参数的函数 该参数用作该函数的输出 输出的大小始终相同 我会 让阅读代码的人清楚所需的大小 不过它已经在函数注释中了 理想情况下 编译会输出警告或错误 这样我就可以在编译时而不是运行时防止出现问
  • Type.GetInterfaces() 仅适用于声明的接口

    首先 像这样的问题有很多 也许有些OP甚至在问同样的问题 问题是这些问题的答案 无论是否接受 都没有真正回答这个问题 至少我找不到 如何确定类直接声明的接口 而不是由父级或声明的接口继承的接口 e g interface I interfa
  • 如何同步nosql db(ravendb)中的更改

    我已经开始在 RavenDB 的示例上学习 NoSQL 我从一个最简单的模型开始 假设我们有由用户创建的主题 public class Topic public string Id get protected set public stri
  • C++ 中是否有与 PHP 的explode() 函数等效的函数? [复制]

    这个问题在这里已经有答案了 可能的重复 在 C 中分割字符串 https stackoverflow com questions 236129 splitting a string in c 在 PHP 中 explode 函数将获取一个字
  • C 变量声明的效率 [重复]

    这个问题在这里已经有答案了 例如 在 C 中声明一个变量需要多长时间int x or unsigned long long var 我想知道它是否会让我的代码在类似的事情中更快 for conditions int var 0 code 这
  • 如何在c#中创建多线程

    我需要监听机器中的所有串行端口 假设我的机器有 4 个串行端口 我必须创建 4 个线程并开始分别使用附加线程监听每个端口 我使用此代码来获取我的机器中的端口数量 private SerialPort comPort new SerialPo
  • 实体框架代码首次日期字段创建

    我正在使用实体框架代码优先方法来创建我的数据库表 下面的代码 创建一个DATETIME数据库中的列 但我想创建一个DATE柱子 DataType DataType Date DisplayFormatAttribute ApplyForma

随机推荐

  • 如何通过 $http 将 angular-ui 的 typeahead 与服务器绑定以进行服务器端优化?

    预输入示例 http angular ui github io bootstrap typeahead 提到在这个自动完成中实现后端很容易 但没有提供示例 我特别感兴趣的是找出当前输入的字符串 以便我可以发送that到服务器并发回已经过滤的
  • NSDateFormatter 和日本日历

    当用户不使用公历作为 iPhone 的默认日历时 我在使用 NSDateFormatter 时遇到问题 NSString testString 2011 01 14 NSDateFormatter dateFormat NSDateForm
  • 在c#中将值参数传递给任务

    我在将 long 按值传递给任务时遇到问题 我有一个 ID 列表 我循环遍历每个 ID 分配给局部变量 然后作为参数传递给新任务 在循环并处理下一个 ID 之前 我不会等待任务完成 我保留了一系列任务 但这无关紧要 loop long ID
  • Scala 宏:定义顶级对象

    我看了type macros对于斯卡拉 但是当我想从示例创建对象时 我收到错误 Example scala 7 gt or lt expected type Test url String macro impl Example scala
  • 如何更改 git 子模块的远程存储库?

    我创建了一个 git 存储库 其中包含一个子模块 我可以告诉子模块本身更改其远程存储库路径 但我不确定如何告诉父存储库如何更改子模块的远程存储库路径 如果我有点运气不好并且必须手动执行操作 我不会感到惊讶 因为即使删除子模块也不容易 您应该
  • stringi 安装错误:配置:错误:C 编译器无法创建可执行文件

    我正在尝试安装stringi最近将 R 更新到最新版本后的软件包 但是 我遇到了这个错误 installing source package stringi package stringi successfully unpacked and
  • 将 HTML5 Canvas 转换为要上传的文件?

    标准 HTML 文件上传的工作原理如下
  • SQL Server 2005/2008 - 为什么没有架构名称的用户可以使用 sys.sysobjects 视图?

    我注意到 SQL Server Express 2008 中有一些奇怪的行为 并且我一直在尝试找出原因 创建新数据库时 无需指定架构标识符即可访问 sys sysobjects 视图 如下所示 SELECT FROM sysobjects
  • C while 循环 - 代码不起作用

    我一直在编写一个简单的程序来检查输入字母是否是元音 但我的代码不起作用 程序应该一一输入字符 直到输入 这将使程序退出 它检查输入字符是否为元音 并打印结果 如果输入不是字母 它还会报告错误 问题是 它在第 二步中打破了循环 提前感谢您的帮
  • 如何识别 WPF 网格上哪个单元格被单击?

    我有一个 3x3 矩阵网格 如果用户位于特定单元格上 单击后如何识别单元格坐标 请指教 谢谢 八打灵再也 假设您正在设计一个井字棋风格的游戏 并且所讨论的网格是标准的 WPF 网格 我想您最好在每个单独的单元格中放置一个控件 这样你就可以挂
  • Symfony2 - 启动 symfony2 命令的进程

    我的目标是在后台启动一些耗时的功能 以避免用户在呈现服务器响应之前等待 我有一个 Symfony 项目 我正在其中从控制器启动异步进程 此过程将启动 Symfony 命令来调用另一个控制器 问题是当我用以下命令调用流程时start proc
  • 使用闭包来跟踪变量:好主意还是肮脏的伎俩?

    好的 我需要能够跟踪值类型对象 这些对象是另一个对象上的属性 如果这些属性不实现 IObservable 接口或类似接口 这是无法完成的 然后我想到了闭包和 Jon Skeet 的著名例子 以及如何多次打印 9 或 10 而不是按升序排列的
  • 如何使用 REST Api 从 salesforce 中的字段获取所有选项列表值?

    我正在尝试使用 REST API 从 salesforce 中的字段获取所有选项列表值 可以这样做吗 如果是的话那该怎么办呢 Thanks Raj 这很简单 您需要访问与此类似的资源 services data v26 0 sobjects
  • ANSI C:__DATE__ 和 __TIME__ 字符串大小的标准定义?

    ANSI C 中 DATE 和 TIME 字符串的大小是否有标准定义 这个问题背后的动机是 我有两个应用程序在两个不同的 CPU 上运行 在运行时 应用程序 1 从应用程序 2 接收日期和时间 作为版本信息的一部分 当然 应用程序 2 从预
  • Javascript 类中的方法链接[重复]

    这个问题在这里已经有答案了 我正在尝试在我的子类中实现方法链接 定位球 class Ball constructor name size power this name name this size size this power powe
  • 匿名方法 - 3 种不同的方式 - 异步

    不确定在标题中写什么 它们可能并不都是匿名方法 但这里是 假设我们有这个异步函数 public async Task Delete something 我正在使用 Blazor 服务器端 我对以下四种调用函数的方式感到好奇 假设它们位于 d
  • Android In App BIlling v3 - 错误的订阅试用期

    我正在使用 Android In App BIlling v3 库 当我调用 bp subscribe Activity subscriptionID 我获得了 Google Play 购买窗口 但计费周期始终为 每天 试用期始终为 1 天
  • Symfony2 Twig 无限子深度

    我有一个自连接表 其中每个文件夹都有一个父文件夹 并且其深度是无限的 一个文件夹可以有另一个文件夹作为父文件夹 没有深度限制 今天我的代码看起来像这样 我正在寻找一种根据需要深入挖掘的方法 而无需对每个步骤进行硬编码 是否有一种方法可以用循
  • Cpdf.php 第 3855 行中的 ErrorException:未定义索引:位于 barryvdh/laravel-dompdf

    我正在使用 laravel 5 2 dompdf 在本地主机上运行良好 但当移动到 AWS 时 它不断显示ErrorException in Cpdf php line 3855 Undefined index 在这一行 3855 中有字体
  • 带有 ssl 本地证书的 QNetworkRequest

    我需要与需要本地证书 crt 文件 的服务器交换数据 我试试这个 loginRequest QNetworkRequest QUrl https somesite com login QSslConfiguration sslConf lo