我使用Qt和QtQuick技术开发了一个跨平台的应用程序。与后端服务器的通信是通过让我们加密SSL来保护的。
但在2021年9月,Qt应用程序开始报告"SSL握手失败“错误,客户端或服务器没有任何更改。有什么问题吗?
发布于 2021-10-03 18:21:49
经过一番研究,我找到了原因:
https://letsencrypt.org/docs/dst-root-ca-x3-expiration-september-2021/
DST根CA X3将于2021年9月30日到期。这意味着那些不信任ISRG Root X1的旧设备在访问使用“让我们加密证书”的站点时将开始收到证书警告。
因此,我必须手动将ISRG根X1证书添加到我的应用程序的可信CA数据库中。为了实现这一点,我访问了让我们使用FireFox进行加密的站点,并将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良好的架构,你不需要做更多的修改。
https://stackoverflow.com/questions/69427667
复制相似问题