QSslConfiguration setProtocol

在 Qt 中,QSslConfiguration::setProtocol 方法用于设置 SSL/TLS 协议版本。它接受一个 QSsl::SslProtocol 枚举值,但 不能直接设置多个协议版本QSsl::SslProtocol 是一个枚举类型,表示单个协议版本。


QSsl::SslProtocol 枚举值

以下是 QSsl::SslProtocol 的常见枚举值:

枚举值描述
QSsl::SslV2 SSL 2.0(已弃用,不安全)
QSsl::SslV3 SSL 3.0(已弃用,不安全)
QSsl::TlsV1_0 TLS 1.0
QSsl::TlsV1_1 TLS 1.1
QSsl::TlsV1_2 TLS 1.2
QSsl::TlsV1_3 TLS 1.3
QSsl::AnyProtocol 支持任何协议(不安全)
QSsl::SecureProtocols 支持安全的协议(TLS 1.0+)
QSsl::TlsV1_0OrLater 支持 TLS 1.0 或更高版本
QSsl::TlsV1_1OrLater 支持 TLS 1.1 或更高版本
QSsl::TlsV1_2OrLater 支持 TLS 1.2 或更高版本

设置多个协议版本

QSslConfiguration::setProtocol 只能设置一个协议版本。如果需要支持多个协议版本,可以使用以下方法:

方法 1:使用 QSsl::SecureProtocols 或 QSsl::TlsV1_2OrLater

QSsl::SecureProtocols 和 QSsl::TlsV1_2OrLater 是组合值,可以支持多个协议版本。

  • QSsl::SecureProtocols:支持 TLS 1.0、TLS 1.1、TLS 1.2 和 TLS 1.3。

  • QSsl::TlsV1_2OrLater:支持 TLS 1.2 和 TLS 1.3。

示例代码

cpp
复制
QSslConfiguration sslConfig = QWebEngineProfile::defaultProfile()->sslConfiguration();
sslConfig.setProtocol(QSsl::SecureProtocols); // 支持 TLS 1.0+
QWebEngineProfile::defaultProfile()->setSslConfiguration(sslConfig);

方法 2:手动设置支持的协议版本

如果需要更精细地控制支持的协议版本,可以通过修改 OpenSSL 的配置来实现。Qt 的 QSslConfiguration 是基于 OpenSSL 的,因此可以通过设置 OpenSSL 的选项来支持多个协议版本。

示例代码

cpp
复制
#include <QSslConfiguration>
#include <QWebEngineProfile>
#include <QWebEngineView>
#include <QApplication>

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);

    QWebEngineView view;

    // 获取 QWebEngineProfile 的 SSL 配置
    QSslConfiguration sslConfig = QWebEngineProfile::defaultProfile()->sslConfiguration();

    // 设置支持的协议版本(TLS 1.2 和 TLS 1.3)
    sslConfig.setProtocol(QSsl::TlsV1_2OrLater); // 支持 TLS 1.2+
    QWebEngineProfile::defaultProfile()->setSslConfiguration(sslConfig);

    view.load(QUrl("https://example.com"));
    view.show();

    return app.exec();
}

方法 3:使用 OpenSSL 的 setOptions 方法

如果需要更底层的控制,可以通过 QSslConfiguration::setOptions 方法设置 OpenSSL 的选项。

示例代码

cpp
复制
#include <QSslConfiguration>
#include <QWebEngineProfile>
#include <QWebEngineView>
#include <QApplication>

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);

    QWebEngineView view;

    // 获取 QWebEngineProfile 的 SSL 配置
    QSslConfiguration sslConfig = QWebEngineProfile::defaultProfile()->sslConfiguration();

    // 设置 OpenSSL 选项
    sslConfig.setProtocol(QSsl::SecureProtocols); // 支持 TLS 1.0+
    sslConfig.setOptions(QSsl::SslOptionDisableLegacyTls); // 禁用旧版 TLS
    QWebEngineProfile::defaultProfile()->setSslConfiguration(sslConfig);

    view.load(QUrl("https://example.com"));
    view.show();

    return app.exec();
}

总结

  • QSslConfiguration::setProtocol 只能设置一个协议版本。

  • 如果需要支持多个协议版本,可以使用 QSsl::SecureProtocols 或 QSsl::TlsV1_2OrLater

  • 如果需要更精细的控制,可以通过修改 OpenSSL 的选项或配置来实现。

根据你的需求选择合适的方法。如果只是需要支持常见的 TLS 版本,推荐使用 QSsl::SecureProtocols 或 QSsl::TlsV1_2OrLater

posted @   远方是什么样子  阅读(15)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
历史上的今天:
2023-02-21 C++设置隐藏文件夹
2022-02-21 applescript执行多条命令
2022-02-21 mac终端关闭远程管理
2022-02-21 QtWebEngineView关闭右键菜单
点击右上角即可分享
微信分享提示