当前位置: 首页 > article >正文

Qt https请求报错SSL handshake failed 解决思路方法

先执行下面代码

    qDebug() << manager.supportedSchemes();
    bool bSupp = QSslSocket::supportsSsl();
    auto buildVersion = QSslSocket::sslLibraryBuildVersionString();
    QString version = QSslSocket::sslLibraryVersionString();
    qInfo() << bSupp << buildVersion << version ;

输出
在这里插入图片描述

说明当前环境是支持ssl,在确认当前环境qt支持openssl的情况下,我正常调用

    QNetworkAccessManager manager;

    QNetworkRequest request;
    request.setUrl(url);

    QString hexString;
    for (const QString& value : dataList) {
        hexString = hexString + value; 
    }
    hexString = hexString.mid(8);
    QByteArray byteArray2 = QByteArray::fromHex(hexString.toUtf8());
    QNetworkReply* reply = manager.post(request, byteArray2);
    QEventLoop loop;
    QObject::connect(reply, &QNetworkReply::finished, &loop, &QEventLoop::quit);
    loop.exec();

    // 检查错误
    if (reply->error() != QNetworkReply::NoError) {
        qDebug() << "请求失败:" << reply->errorString();
    } else {
        qDebug() << "请求成功";
        qDebug() << "响应:" << reply->readAll();
    }

    // 清理
    reply->deleteLater();

忽略ssl证书校验进行请求(上面代码省略),报错SSL handshake failed
在这里插入图片描述
我尝试换了种方法请求


    QSslSocket sslSocket;
    sslSocket.connectToHostEncrypted("192.168.0.169", 10669);
    if (sslSocket.waitForEncrypted()) {
        qDebug() << "SSL connection established!";
    } else {
    }

报了141A4132:SSL routines:tls_process_ske_ecdhe:bad ecpoint 类似这样的错误

似乎可以确定是什么曲线算法有问题了。

我以为是我的openssl版本有问题,下载了1.1.1k ,1.1.1u 还有最新的3系列版本,都不行

不能一直僵着,我尝试请求另一台服务器,我发现可以请求过去!!!!

然后这时候搜到一篇博文
https://blog.csdn.net/xiaojun081004/article/details/140035579

这个给了我启发,基本可以确定这个算法不一样导致握手失败了,既然不一样,那就得找到哪里不一样啊

然后开始抓包,源码面前,了无秘密
在这里插入图片描述
这块是客户端告诉服务端它支持的算法
在这里插入图片描述
然后服务端会挑一个它也支持的给客户端,就是这个x25519,这个x25519是成功的

另一台不成功的返回的是x448这个算法,

既然这样,我想着,我把x488屏蔽不就可以了,supportedEllipticCurves可以打印支持哪些曲线

qDebug() << manager.supportedSchemes();
    QVector<QSslEllipticCurve> curves;
    foreach(const QSslEllipticCurve &curve, sslConfig.supportedEllipticCurves()) {
        qDebug()  << "当前支持曲线1=" << curve.longName();
    }
    
    curves.push_back(QSslEllipticCurve::fromShortName("x25519"));
    sslConfig.setEllipticCurves(curves);

支持的都打印出来,没有x488,也没有x25519,见鬼,然后不服输,下载了qt的源码,也没有发现哪里赋值了x488 x25519

如果是默认的,就用,如果我自己添加,就没有。。。。。。。

没办法了,尝试从服务端入手,gpt告诉我可以在nginx明确指定算法

ssl_ecdh_curve x25519:

我试了不行,最后我再次对比了两个服务器的nginx配置,发现请求不同的多配置了下面这个东西,就是服务器的算法优先

ssl_prefer_server_ciphers on;

我关掉试试?

成了!

就是这个ssl_prefer_server_ciphers on导致的,给我害苦了。。。。。。。。。。


http://www.kler.cn/a/459459.html

相关文章:

  • 基本算法——回归
  • 无人机飞手培训机构大量新增,考取飞手证参军入伍还有优势吗?
  • 【74LS160+74LS273DW锁存器8位的使用频率计】2022-7-12
  • python openyxl 用法 教程
  • JVM实战—8.如何分析jstat统计来定位GC
  • GeoTrust True BusinessID Wildcard
  • AI大模型-提示工程学习笔记0
  • 进程通信(8)读写锁
  • LabVIEW手部运动机能实验系统
  • 使用工厂+策略模式实现去除繁琐的if else
  • 菲尼克斯超级工厂落地南京,汽车市场被瞄准
  • FreeRTOS的时间管理
  • CSS过渡(transition)
  • 【Rust自学】8.2. Vector + Enum的应用
  • 第1关:博客系统数据库设计与实现之查询
  • bacnet mstp设备数据 转 opc ua项目案例
  • vue实现平滑滚动到目标标签页
  • 数据结构-1-线性表
  • Azure DevOps Server:使用TfsDeleteProject.exe删除团队项目
  • 第四期书生大模型实战营 第10关 InternVL 多模态模型部署微调实践
  • WebRTC :原理、协议和应用场景
  • 24.12.27 SpringMVCDay02
  • python3中条件判断语句:if 语句与if嵌套语句
  • CSS利用浮动实现文字环绕右下角,展开/收起效果
  • 从论文到实践:Stable Diffusion模型一键生成高质量AI绘画
  • 【笔记️】魔爪 Mini mx 使用快捷键