Skip to content
EN

NSURLErrorServerCertificateUntrusted: iOS fix

Коротко:

NSURLErrorServerCertificateUntrusted (код -1202) — Foundation Network layer iOS/macOS отверг сервер SSL cert. Причина: self-signed, expired, untrusted CA, пустой SAN, или cert не удовлетворяет ATS (App Transport Security) requirements. В 2026 iOS требует TLS 1.2+, forward secrecy, SHA-256+ signature. Fix: реальный cert от Let's Encrypt/Sectigo, или для dev — NSAllowsArbitraryLoads (НЕ production).

Ниже: причины, исправление, FAQ.

Проверить SSL своего сайта →

Причины ошибки

  • Self-signed cert в dev-окружении без bundle trust
  • App Transport Security (ATS) отвергает TLS 1.0/1.1
  • Cert не содержит SAN (Subject Alternative Name) — iOS требует с 2017
  • CA не в iOS trust store (старые Symantec root retired)
  • Cert chain неполный (нет intermediate)

Пошаговое исправление

  1. Используйте real cert от mainstream CA (Let's Encrypt, DigiCert, Sectigo)
  2. Проверьте chain: Enterno SSL Checker
  3. Для dev: pin cert в app через NSURLSessionDelegate urlSession:didReceiveChallenge:
  4. Info.plist: NSAppTransportSecurity > NSExceptionDomains для specific domain (осторожно)
  5. TLS config server: TLS 1.2+ + ECDHE + SHA-256

Проверить SSL-сертификат →

Смежные SSL-ошибки

Что такое NSURLErrorServerCertificateUntrusted (-1202)?

Ошибка NSURLErrorServerCertificateUntrusted (-1202) возникает, когда приложение на iOS или macOS не может установить доверие к SSL-сертификату сервера. Это может произойти из-за самоподписанного сертификата, недействительного сертификата или проблем с цепочкой доверия. Для решения этой проблемы необходимо убедиться, что сертификат сервера корректен и подпись сертификата доверена.

Причины возникновения ошибки и способы её устранения

Ошибка NSURLErrorServerCertificateUntrusted может возникать по нескольким причинам:

  • Самоподписанный сертификат: Сертификаты, созданные самостоятельно, не будут признаны доверенными браузерами и приложениями.
  • Истекший сертификат: Если срок действия сертификата истек, система не сможет его подтвердить.
  • Проблемы с цепочкой сертификатов: Если промежуточные сертификаты отсутствуют или неправильно установлены, это также может вызвать ошибку.

Для устранения ошибки можно использовать следующие подходы:

  1. Установка доверенного сертификата: Получите SSL-сертификат от надежного удостоверяющего центра (CA) и установите его на сервер.
  2. Проверка и обновление сертификата: Убедитесь, что сертификат не истек и все промежуточные сертификаты установлены правильно.
  3. Добавление сертификата в доверенные: Для тестирования можно добавить самоподписанный сертификат в доверенные сертификаты на устройстве (не рекомендуется для продакшн-среды).

Для добавления сертификата на macOS можно использовать следующую команду:

sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain /path/to/your/certificate.crt

Эта команда добавляет сертификат в системный ключ, что позволяет ему быть доверенным.

Практический пример: исправление ошибки на iOS

Рассмотрим практический пример исправления ошибки NSURLErrorServerCertificateUntrusted на iOS. Предположим, вы пытаетесь подключиться к вашему серверу, но получаете ошибку. Вот шаги, которые можно предпринять:

  1. Проверка сертификата: Используйте команду OpenSSL для проверки вашего сертификата:
openssl s_client -connect yourserver.com:443

Эта команда покажет информацию о сертификате, включая ошибки, если они есть.

  1. Установка доверенного сертификата: Если вы используете самоподписанный сертификат, создайте его с помощью OpenSSL и добавьте в доверенные. Если это тестовая среда, можно использовать следующий код в вашем приложении:
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
configuration.URLCache = [[NSURLCache alloc] init];

NSURLSession *session = [NSURLSession sessionWithConfiguration:configuration delegate:self delegateQueue:nil];

Не забудьте реализовать метод делегата для обработки сертификатов:

- (void)URLSession:(NSURLSession *)session didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition, NSURLCredential * _Nullable))completionHandler {
    if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]) {
        NSURLCredential *credential = [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust];
        completionHandler(NSURLSessionAuthChallengeUseCredential, credential);
    } else {
        completionHandler(NSURLSessionAuthChallengePerformDefaultHandling, nil);
    }
}

Этот код позволяет вашему приложению доверять сертификату сервера. Однако, помните, что этот подход не рекомендуется для продакшн-среды из-за соображений безопасности.

  1. Тестирование: После внесения изменений протестируйте приложение, чтобы убедиться, что ошибка устранена. Если проблема сохраняется, проверьте настройки сервера и убедитесь, что все промежуточные сертификаты установлены корректно.

Следуя этим шагам, вы сможете устранить ошибку NSURLErrorServerCertificateUntrusted и обеспечить надежное соединение с вашим сервером.

СертификатСрок, издатель, домены (SAN)
ЦепочкаПроверка промежуточных и корневых CA
TLS-протоколВерсия TLS и набор шифров
УязвимостиHeartbleed, POODLE, слабые шифры

Почему нам доверяют

TLS 1.3
поддержка
Полная
цепочка CA
<2с
результат
30/14/7
дней до истечения

Как это работает

1

Введите домен

2

Проверка цепочки TLS

3

Дата истечения и уязвимости

Что проверяет SSL-тест?

SSL/TLS — протокол шифрования, который защищает данные между браузером и сервером. Наш инструмент анализирует сертификат, цепочку доверия, версию TLS и известныеуязвимости.

Детали сертификата

Издатель, срок действия, алгоритм подписи, покрываемые домены (SAN) и тип валидации (DV/OV/EV).

Цепочка доверия

Проверка полной цепочки: от конечного сертификата через промежуточные до корневого CA.

Анализ TLS

Версия протокола (TLS 1.2/1.3), набор шифров, поддержка Perfect Forward Secrecy (PFS).

Оповещения об истечении

Создайте монитор — получайте уведомления в Telegram и email за 30/14/7 дней до истечения.

DV vs OV vs EV сертификаты

DV (Domain Validation)
  • Подтверждение только владения доменом
  • Выдаётся за минуты автоматически
  • Бесплатно через Let's Encrypt
  • Подходит для большинства сайтов
  • Самый распространённый тип
OV / EV
  • Проверка организации (OV) или расширенная проверка (EV)
  • Выдаётся за 1-5 рабочих дней
  • Стоимость от $50 до $500/год
  • Для финансов, e-commerce, госсайтов
  • Повышает доверие пользователей

Кому это нужно

DevOps

мониторинг SSL-сертификатов

Безопасность

аудит TLS-конфигурации

SEO

HTTPS как фактор ранжирования

E-commerce

доверие покупателей

Частые ошибки

Истёкший сертификатБраузеры блокируют сайт с истёкшим SSL. Настройте автопродление или мониторинг.
Неполная цепочка сертификатовБез промежуточного CA некоторые браузеры и боты не смогут верифицировать сертификат.
Mixed content на HTTPS-сайтеHTTP-ресурсы на HTTPS-странице — замок в браузере пропадает, снижается доверие.
Использование TLS 1.0/1.1Устаревшие версии TLS содержат известные уязвимости. Используйте TLS 1.2+ или 1.3.
Несовпадение домена в сертификатеСертификат должен покрывать все домены сайта, включая www и поддомены.

Лучшие практики

Настройте автопродлениеLet's Encrypt + certbot с cron — сертификат обновляется автоматически каждые 60-90 дней.
Включите HSTSЗаголовок Strict-Transport-Security заставляет браузер всегда использовать HTTPS.
Используйте TLS 1.3TLS 1.3 быстрее (1-RTT handshake) и безопаснее — убраны устаревшие шифры.
Мониторьте срок действияСоздайте монитор на Enterno.io — получайте уведомления задолго до истечения.
Проверяйте цепочку после обновленияПосле обновления сертификата убедитесь, что промежуточные сертификаты установлены.

Получите больше с бесплатным аккаунтом

Мониторинг SSL-сертификатов, история проверок и уведомления за 30 дней до истечения.

Зарегистрироваться (FREE)

Больше по теме

Источники

Часто задаваемые вопросы

Как добавить self-signed для dev?

Info.plist → NSAppTransportSecurity → NSExceptionDomains → your-dev-domain → NSExceptionAllowsInsecureHTTPLoads=YES. Но только debug builds.

Certificate pinning best practice?

SHA-256 hash certificate или SPKI pin. Rotate вместе с cert, провалидируйте при каждом build.

iOS игнорирует self-signed?

Да, Foundation по default. Нужен custom trust eval через URLSessionDelegate.

ATS требования 2026?

TLS 1.2+, ECDHE forward secrecy, AES-128-GCM+, SHA-256 signature. Cert с SAN (обязательно).

Запустить инструмент, который описан в этой статье

Бесплатный тариф — 10 мониторов, проверки каждые 5 мин, без карты. Платные тарифы — интервал от 1 минуты и проверки из нескольких регионов.