【问题标题】:"SSL handshake failed" error for Let's Encrypt on September 20212021 年 9 月 Let's Encrypt 出现“SSL 握手失败”错误
【发布时间】:2021-11-24 09:18:30
【问题描述】:

我使用 Qt 和 QtQuick 技术开发了一个跨平台应用程序。与后端服务器的通信由 Let's Encrypt SSL 保护。
但是在 2021 年 9 月,Qt 应用程序开始报告“SSL 握手失败”错误,而客户端或服务器没有任何变化。 有什么问题?

【问题讨论】:

    标签: c++ qt ssl qtquick2 lets-encrypt


    【解决方案1】:

    经过一番研究,我找到了原因:

    https://letsencrypt.org/docs/dst-root-ca-x3-expiration-september-2021/

    DST Root CA X3 将于 2021 年 9 月 30 日到期。这意味着那些不信任 ISRG Root X1 的旧设备将在访问使用 Let's Encrypt 证书的网站时开始收到证书警告。

    因此,我必须手动将 ISRG Root X1 证书添加到我的应用程序的受信任 CA 数据库中。为了实现这一点,我使用 FireFox 访问了 Let's Encrypt 站点,并将 ISRG Root X1 证书 PEM 文件保存到我的应用程序资源中(保存到 qrc 文件中)。然后我使用以下代码将其添加到默认 CA 证书数据库中:

    //Adding CA root certificate of the Let'sEncrypt into default CA DB
    //for Qt 5.15+
    #if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0)
    qDebug() << "loading embedded \"ISRG Root X1\" CA cert:" << QSslConfiguration::defaultConfiguration().addCaCertificates(":/ca_certs/isrg_root_x1.pem");
    #else
    qDebug() << "loading embedded \"ISRG Root X1\" CA cert:" << QSslSocket::addDefaultCaCertificates(":/ca_certs/isrg_root_x1.pem");
    #endif
    

    请注意,Qt 5.15+ 有一种新方法可以做到这一点,而旧方法已被弃用。如您所见,我使用的是 Qt 5.12,因此我需要添加两种方式(以使我的应用程序更适合 Qt 5.15+)。

    感谢 Qt 良好的架构,您无需再做任何更改。

    【讨论】:

      猜你喜欢
      • 2017-08-26
      • 2014-01-14
      • 2012-06-18
      • 1970-01-01
      • 1970-01-01
      • 2019-03-20
      • 2017-01-20
      • 1970-01-01
      • 2020-08-14
      相关资源
      最近更新 更多