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。
示例代码
QSslConfiguration sslConfig = QWebEngineProfile::defaultProfile()->sslConfiguration();
sslConfig.setProtocol(QSsl::SecureProtocols); // 支持 TLS 1.0+
QWebEngineProfile::defaultProfile()->setSslConfiguration(sslConfig);
方法 2:手动设置支持的协议版本
如果需要更精细地控制支持的协议版本,可以通过修改 OpenSSL 的配置来实现。Qt 的 QSslConfiguration
是基于 OpenSSL 的,因此可以通过设置 OpenSSL 的选项来支持多个协议版本。
示例代码
#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 的选项。
示例代码
#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
。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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关闭右键菜单