Sécurité TLS
iOS, iPadOS et macOS prennent en charge les protocoles Transport Layer Security (TLS 1.0, TLS 1.1, TLS 1.2, TLS 1.3) et Datagram Transport Layer Security (DTLS). Le protocole TLS prend en charge les algorithmes AES128 et AES256, et préfère les suites de chiffrement avec confidentialité persistante. Les apps qui se connectent à Internet, comme Safari, Calendrier et Mail, utilisent automatiquement ce protocole pour établir un canal de communication chiffré entre l’appareil et les services du réseau. Les API de haut niveau (comme CFNetwork) permettent aux développeurs d’intégrer facilement le protocole TLS à leurs apps, tandis que les API de bas niveau (comme Network.framework) leur offrent un contrôle plus fin. L’API CFNetwork rejette le protocole SSL 3; les apps qui utilisent WebKit, comme Safari, sont donc incapables d’établir une connexion SSL 3.
Sous iOS 11 et macOS 10.13 et les versions ultérieures, les certificats SHA-1 ne sont plus pris en charge pour les connexions TLS, à moins qu’ils ne soient autorisés par l’utilisateur. Les certificats dotés de clés RSA de moins de 2 048 bits sont aussi rejetés. La méthode de chiffrement symétrique RC4 n’est plus prise en charge sous iOS 10 et macOS 10.12. Par défaut, les clients TLS ou les serveurs utilisant les API SecureTransport ne sont pas compatibles avec la méthode de chiffrement RC4 et sont incapables de se connecter si RC4 est la seule méthode de chiffrement disponible. Les services ou les apps qui nécessitent RC4 devraient être mis à niveau et utiliser des méthodes de chiffrement sécurisées. Sous iOS 12.1, seuls les certificats délivrés après le 15 octobre 2018 à partir d’un certificat racine de confiance et inscrits sur une liste approuvée de transparence des certificats sont pris en charge pour les connexions TLS. Sous iOS 12.2, TLS 1.3 est activé par défaut pour les API Network.framework et NSURLSession. Les clients TLS qui utilisent les API SecureTransport ne peuvent pas utiliser TLS 1.3.
Fonctionnalité App Transport Security
La fonctionnalité App Transport Security établit des exigences de connexion par défaut afin que les apps se comportent conformément aux bonnes pratiques en matière de connexions sécurisées lorsqu’elles utilisent les API NSURLConnection, CFURL ou NSURLSession. Par défaut, App Transport Security restreint le choix des méthodes de chiffrement à celles qui offrent la confidentialité persistante, en particulier :
ECDHE_ECDSA_AES et ECDHE_RSA_AES en mode GCM (Galois/Counter Mode)
Mode CBC (Cipher Block Chaining, enchaînement des blocs)
Les apps peuvent désactiver l’exigence de confidentialité persistante par domaine, auquel cas le chiffrement RSA_AES est ajouté aux méthodes disponibles.
Les serveurs doivent prendre en charge TLS 1.2 et la confidentialité persistante, et les certificats doivent être valides et signés à l’aide de SHA256 ou mieux, avec une clé RSA de 2 048 bits ou une clé ECC de 256 bits minimum.
Les connexions réseau qui ne satisfont pas à ces exigences échouent, à moins que l’app annule App Transport Security. Les certificats non valides entraînent toujours une erreur permanente ou une absence de connexion. La fonctionnalité App Transport Security s’applique automatiquement aux apps compilées pour iOS 9 et macOS 10.11 et les versions ultérieures.
Vérification de la validité des certificats
L’évaluation de la fiabilité d’un certificat TLS est effectuée conformément aux normes établies par l’industrie, décrites dans le document RFC 5280, et comprend des normes émergentes comme RFC 6962 (sur la transparence des certificats). Sous iOS 11 et macOS 10.13 et les versions ultérieures, les appareils Apple sont mis à jour régulièrement avec la liste à jour des certificats révoqués ou restreints. Celle-ci est tirée des listes de révocation de certificats (CRL) publiées par chacune des autorités de certification racine intégrée autorisées par Apple et leurs émetteurs subordonnés. Apple peut, à sa discrétion, ajouter d’autres contraintes. Ces informations sont consultées dès qu’une fonction d’une API réseau est utilisée pour établir une connexion sécurisée. Si le nombre de certificats révoqués d’une autorité de certification est trop élevé pour les énumérer un par un, une évaluation de fiabilité pourrait plutôt nécessiter une réponse du protocole de vérification de certificats en ligne (OCSP), sans quoi elle échouerait.