我有一个 Qt 应用程序,它成功地在 OSX 10.7 上向我们的网站发出 HTTPS 请求,但在 10.5.8 上失败,并出现 QSslError::errorString“根 CA 证书不被信任用于此目的”。
我正在设置根证书:
QFile certFile1(":/Equifax_Secure_Certificate_Authority.pem.txt");
QSslCertificate cert1(&certFile1, QSsl::Pem);
certList.append(cert1);
QSslConfiguration sslConfig(request.sslConfiguration());
sslConfig.setCaCertificates(certList);
request.setSslConfiguration(sslConfig);
如果我设置了一些其他证书,我会在 OSX 10.5.8 和 10.7 上收到两个错误字符串“找不到本地查找证书的颁发者证书”和“根 CA 证书不为此目的受信任”。这是我所期望的。
是什么让 Qt 仅在 10.5.8 上不信任 Equifax 证书?
编辑:可能的线索(或红鲱鱼):查看各自的 WireShark 跟踪,10.5.8 客户端在其客户端问候握手中不包括服务器名称指示或会话票证 TLS 扩展。
编辑 2:在 10.5.8 上构建为 32 位的作品。此外,在 10.7 上构建为通用(32 位和 64 位 Intel)并在 10.5.8 上运行,链接到基于 10.5.8 构建的 32 位 Qt 库。
编辑 3:我在https://github.com/cdemel/SO_examples/tree/master/soqtssl放置了一个示例,使用不同的网站(Twitter)和根证书,行为相同。