You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Qt项目跨Windows10/11后TLS初始化失败及OpenSSL链接问题

Windows 11下Qt 6.5项目TLS初始化失败问题排查与解决

问题描述

项目最初在Windows 10上测试一切正常,同一机器切换至Windows 11后,无法发起网络请求,持续返回"TLS initialization failed"错误。

错误日志

每次发起请求时,Qt输出以下警告:

W qt.network.ssl:  unknown unknown The backend "cert-only" does not support QSslKey
W qt.network.ssl:  unknown unknown Active TLS backend does not support key creation
W qt.network.ssl:  unknown unknown The backend "cert-only" does not support QSslKey
W qt.network.ssl:  unknown unknown Active TLS backend does not support key creation
W qt.network.ssl:  unknown unknown The backend "cert-only" does not support QSslSocket
W qt.network.ssl:  unknown unknown The backend named "cert-only" does not support TLS
W qt.network.ssl:  unknown unknown QSslSocket::connectToHostEncrypted: TLS initialization failed

CMake中OpenSSL链接配置

当前项目针对Android平台的OpenSSL配置如下:

set_target_properties(${GW_LIBRARY_NAME} PROPERTIES QT_ANDROID_PACKAGE_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/android)

list(APPEND android_extra_libs
     ${CMAKE_CURRENT_SOURCE_DIR}/../assets/libs/openssl/arm64/libcrypto_1_1.so
     ${CMAKE_CURRENT_SOURCE_DIR}/../assets/libs/openssl/arm64/libssl_1_1.so)

set_target_properties(${GW_LIBRARY_NAME} PROPERTIES
   QT_ANDROID_EXTRA_LIBS "${android_extra_libs}")

当前环境

  • Qt 6.5
  • Android NDK 25
  • 测试环境:同一机器从Windows 10切换至Windows 11

注:该代码在Windows 10的其他Qt项目中可正常运行。

SSL版本检测结果

调用QSslSocket版本检测接口:

qDebug() << "My build Version String is - "
         << QSslSocket::sslLibraryBuildVersionString() << "  "
            " and version string is  "
         << QSslSocket::sslLibraryVersionString();

输出结果:

"My build Version String is - "Secure Channel (NTDDI: 0xA00000C)" and version string is  "Secure Channel, Windows 10.0.18363"

解决方案建议

1. 强制Qt使用OpenSSL后端而非SCHANNEL

Qt 6在Windows默认使用系统SCHANNEL作为SSL后端,Windows 11与Win10的SCHANNEL版本差异可能导致兼容问题。可强制切换到OpenSSL:

  • 下载与Qt 6.5匹配的OpenSSL 3.x预编译库,将libssl-3.dll和libcrypto-3.dll放入项目输出目录或系统环境路径。
  • 在程序启动阶段添加代码:
QSslSocket::setBackend("openssl");

2. 补充Windows平台的CMake OpenSSL配置

当前CMake仅配置了Android平台的OpenSSL,需为Windows平台添加链接逻辑:

if(WIN32)
    set(OPENSSL_ROOT_DIR "你的OpenSSL安装路径")
    find_package(OpenSSL REQUIRED)
    target_link_libraries(${GW_LIBRARY_NAME} PRIVATE OpenSSL::SSL OpenSSL::Crypto)
endif()

3. 检查Windows 11的SCHANNEL协议设置

  • 打开「设置-网络和Internet-高级网络设置-高级共享设置」,确保TLS相关协议启用。
  • 运行gpedit.msc,进入计算机配置-管理模板-网络-SSL配置设置,确认TLS 1.2/1.3等协议未被禁用。

4. 清理缓存并重新编译项目

系统切换后可能存在编译缓存兼容问题:

  • 删除项目的CMake缓存和构建目录,重新生成构建文件。
  • 使用适配Windows 11的编译器(如MSVC 2022)重新编译项目。

内容的提问来源于stack exchange,提问作者codeClash

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 03:17:07