【问题标题】:Relation between QT_NO_SSL and QSslSocket::supportsSsl()QT_NO_SSL 和 QSslSocket::supportsSsl() 之间的关系
【发布时间】:2016-01-27 22:25:51
【问题描述】:

有一个定义QT_NO_SSL,如果没有找到 Ssl 库则定义。 还有QSslSocket::supportsSsl()的方法。

但这两者有什么关系,它们是等价的吗? QT_NO_SSL <=> QSslSocket::supportsSsl() returns false 是否成立,或者 QT_NO_SSL 是否未定义,但 QSslSocket::supportsSsl() 返回 false?

【问题讨论】:

    标签: ssl qt5 qsslsocket


    【解决方案1】:

    Qt(至少使用 OpenSSL 后端)可以编译:

    1. 没有 SSL 支持 -- QT_NO_SSL 定义,SSL 类甚至不能用于编译;
    2. 在运行时加载 SSL 支持 => OpenSSL 标头必须在编译时存在,但 QtNetwork 不会链接到 libssl/libcrypto/...;相反,它会在运行时 dlopen 那些库寻找它需要的功能;
    3. 具有从 QtNetwork 链接的 SSL 支持。

    这样做的原因与将 QtNetwork 链接到密码库会在从/到美国的再分配方面引发法律问题有关。使用#3,您必须拥有 SSL 库,否则您的应用程序将无法启动,即使您根本不需要 SSL;并且 Qt 安装程序无法“轻松”发布这些 SSL 库。因此,Qt 在配置 #2 中编译,有责任安装 OpenSSL。

    QT_NO_SSL 未定义但QSslSocket::supportsSsl() 返回 false 的场景是 #2(例如,如果 Qt 无法找到或加载合适的 SSL 库)。

    【讨论】:

    • 所以你确实需要两者来确保支持 SSL。谢谢!
    猜你喜欢
    • 2018-04-17
    • 2011-09-06
    • 2016-06-10
    • 2013-02-03
    • 2019-07-10
    • 2017-04-04
    • 2010-12-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多