Безопасность TLS
iOS, iPadOS и macOS поддерживают протокол Transport Layer Security (TLS 1.0, TLS 1.1, TLS 1.2 и TLS 1.3) и Datagram Transport Layer Security (DTLS). Протокол TLS поддерживает AES-128 и AES-256, предпочитая наборы шифров с прямой секретностью. Интернет-приложения, например Safari, Календарь и Почта, автоматически используют этот протокол для установления зашифрованного канала связи между устройством и сетевыми службами. Высокоуровневые API (такие как CFNetwork) упрощают внедрение TLS в приложениях сторонних разработчиков, а низкоуровневые API (такие как Network.framework) предоставляют детальный контроль. CFNetwork не разрешает использовать SSL 3, а приложениям, использующим WebKit (например, Safari), запрещается устанавливать подключения с использованием SSL 3.
В iOS 11 или новее и macOS 10.13 или новее сертификаты SHA-1 нельзя использовать для TLS-соединений, если им не доверяет пользователь. Также не разрешены сертификаты с ключами RSA короче 2048 бит. Набор симметричных шифров RC4 в iOS 10 и macOS 10.12 считается устаревшим. По умолчанию клиенты и серверы TLS, реализованные с использованием API SecureTransport, не имеют наборов шифров RC4 (их поддержка отключена) и не могут установить соединение, если единственным доступным набором шифров является RC4. Для повышения безопасности необходимо обновить службы и приложения, требующие использования RC4, чтобы в них использовались безопасные наборы шифров. В iOS 12.1 сертификаты, выпущенные после 15 октября 2018 г. от имеющего доверие в системе корневого сертификата, для установления TLS-соединений должны быть внесены в доверенный журнал прозрачности сертификатов. В iOS 12.2 стандарт TLS 1.3 по умолчанию включен для Network.framework и API NSURLSession. Клиенты TLS, использующие API SecureTransport, не могут использовать TLS 1.3.
App Transport Security
Протокол App Transport Security предоставляет используемые по умолчанию требования к подключению, чтобы приложения работали с защищенными подключениями при использовании API NSURLConnection, CFURL и NSURLSession. По умолчанию протокол App Transport Security ограничивает возможность выбора шифра только теми наборами, которые обеспечивают прямую секретность, в частности следующие:
ECDHE_ECDSA_AES и ECDHE_RSA_AES в режиме Galois/Counter Mode (GCM)
Режим поблочной передачи зашифрованного текста (CBC)
Приложения могут отключить требование обязательной прямой секретности на уровне домена; в этом случае к набору доступных шифров добавляется RSA_AES.
Серверы должны поддерживать TLS 1.2 и прямую секретность, а сертификаты должны быть действительны и подписаны с использованием шифрования SHA256 (или более надежного) с ключом уровня не ниже, чем 2048-битный ключ RSA или 256-битный ключ на основе эллиптических кривых.
Сетевые подключения, не отвечающие этим требованиям, будут прерваны, если только в приложении не предусмотрен обход протокола App Transport Security. Использование недействительных сертификатов всегда приводит к постоянному отказу и отсутствию подключения. Протокол App Transport Security автоматически применяется для приложений, скомпилированных для iOS 9 или новее и macOS 10.11 или новее.
Проверка действительности сертификата
Оценка доверенного статуса сертификата TLS выполняется в соответствии с отраслевыми стандартами, установленными в RFC 5280, и новыми стандартами, такими как RFC 6962 (прозрачность сертификатов). В iOS 11 или новее и macOS 10.13 или новее устройства Apple периодически получают актуальный список отозванных и ограниченных сертификатов. Список обобщает списки отзыва сертификатов (CRL), публикуемые всеми встроенными корневыми центрами сертификации, которым доверяет Apple, а также их подчиненными центрами сертификации. Список также может включать в себя и другие ограничения по усмотрению Apple. Эта информация используется каждый раз, когда для установления безопасного соединения используется функция сетевого API. Если было отозвано слишком много сертификатов центра сертификации, чтобы перечислять их по отдельности, вместо сертификата для оценки доверия может использоваться ответ по протоколу состояния сетевого сертификата (OCSP). Если ответ не получен, тест на оценку доверия не будет пройден.