Всем привет. Никто не сталкивался с проблемой отсутствия корневых сертификатов

в айос? Имеется в виду стандартный QNetworkAccessManager. Мне пришлось сделать буквально ручную проверку сертификата, но это геммор, потому-что с каждой заменой сертификата (а гугл с эплом сейчас требуют менять их ежегодно) приходится принуждать юзеров обновляться, что не есть гуд. И вот очередной раз меняем сертификат и я решил таки разобраться с этим раз и навсегда. На сервере апач настроен так:
SSLCertificateFile - указан путь к файлу с сертификатом
SSLCertificateKeyFile - путь к файлу с ключом
SSLCertificateChainFile - путь к бандлу с двумя сертификатами CA, причем верхний самоподписанный, DigiCert Global Root CA
На андроиде никогда никаких проблем не возникало, на айос же сейчас (это отличается от предыдущего сертификата) ругается на вот этот верхний сертификат от DigiCert - QSslError::SelfSignedCertificateInChain - что вообще логично, ведь он верхнего уровня то. На десктопах тоже таких проблем нет. Только на айос. Может кто сталкивался и объяснит, что мы делаем неправильно?
Проверил вот такое - на загрузке приложения:
QSslConfiguration defConf = QSslConfiguration::defaultConfiguration();
QList<QSslCertificate> cadb = defConf.caCertificates();
qDebug() << "CA certificates:";
qDebug() << "-------------------------------";
for(int i=0; i < cadb.count(); i++)
{
qDebug() << cadb[i].toText();
qDebug() << "-------------------------------";
}
qDebug() << "-------------------------------";
Так вот на андроиде 137 сертификатов и среди них есть наш корневой. На айос же этот список пустой. В сети ничего нет, отсюда я делаю вывод, что это я тупой, а не баг в кьюте. Но в чём дело понять не могу

3 ответов

2 просмотра

Похоже, надо идти в сырцы, смотреть, как это реализуется для ios

Sergey eSKon- Автор вопроса
Anatoly Shirokov
Похоже, надо идти в сырцы, смотреть, как это реали...

офигеть: QList<QSslCertificate> QSslSocketPrivate::systemCaCertificates() { ensureInitialized(); QList<QSslCertificate> systemCerts; // SecTrustSettingsCopyCertificates is not defined on iOS. #ifdef Q_OS_MACOS // iterate through all enum members, order: // kSecTrustSettingsDomainUser, kSecTrustSettingsDomainAdmin, kSecTrustSettingsDomainSystem for (int dom = kSecTrustSettingsDomainUser; dom <= int(kSecTrustSettingsDomainSystem); dom++) { QCFType<CFArrayRef> cfCerts; OSStatus status = SecTrustSettingsCopyCertificates(SecTrustSettingsDomain(dom), &cfCerts); if (status == noErr) { const CFIndex size = CFArrayGetCount(cfCerts); for (CFIndex i = 0; i < size; ++i) { SecCertificateRef cfCert = (SecCertificateRef)CFArrayGetValueAtIndex(cfCerts, i); QCFType<CFDataRef> derData = SecCertificateCopyData(cfCert); if (isCaCertificateTrusted(cfCert, dom)) { if (derData == NULL) { qCWarning(lcSsl, "Error retrieving a CA certificate from the system store"); } else { systemCerts << QSslCertificate(QByteArray::fromCFData(derData), QSsl::Der); } } } } } #endif return systemCerts; } то есть он на айос системные CA вообще не грузит... что за нафиг...

Похожие вопросы

Обсуждают сегодня

Почему Telegram пишет, что объект media не найден, хотя на самом деле я его передаю? Делаю на urllib, без зависимостей, так надо. Вызываю метод sendMediaGroup с таким JSON: ...
Alexey S
1
Сonst magicTgHTML = (text, entities) => { let processedText = text; let offsetShift = 0; entities.forEach(entity => { const { offset, length, type, url, ...
Андрей
1
Чет мне ссыкотно опять Rainlab.User в проект ставить. Кто знает, опять наотъебись все сделали или после обнов пользоваться можно?
Black Cat
10
это группа токсиков или тех кто помогает?
Ибрагим
9
Загрузил на свой сервер, теперь обычные прямые ссылки без query параметров и возможных ограничений, всё равно та же ошибка. Неужели скачивать из VK и перезаливать в TG кажд...
Alexey S
2
коллеги привет. уже второй день бьемся об заклад с одной ошибкой, может вы сталкивались с таки странным поведением? есть тестовый сервер, на который паблишим релизную версию W...
Magzhan
11
В смысле более затратная? Общая стоимость владения лошадью меньше, чем автомобиля. В среднем.
Sergej R
10
Можете помочь с этим, я тут использую Джанго как ОРМ для бота, но бот запускать не хочет, уже всезде перерыл не могу решить, может кто то сталкивался?
Ибрагим
4
Кстати, раз про скачивание файлов разговор зашел) Сделал бота для себя (транскрибирующего и суммаризирующего встречи) но не ожидал что за 2 месяца 10к пользователей набежит😅...
Andrey Obolenskiy
8
всем привет. подскажите. сделал политику, он верхнеуровневая. раздал права только на TEST2 (полные). вопрос - можно ли сделать так, чтобы был доступен только TEST2, а остально...
Андрей Сергеев
5
Карта сайта