Partager via


App Transport Security dans Xamarin.iOS

App Transport Security (ATS) applique des connexions sécurisées entre les ressources Internet (telles que le serveur principal de l’application) et votre application.

Cet article présente les modifications de sécurité appliquées par App Transport Security sur une application iOS 9 et ce que cela signifie pour vos projets Xamarin.iOS, il couvre les options de configuration ATS et explique comment désactiver ATS ATS ATS si nécessaire. Étant donné que ATS est activé par défaut, toutes les connexions Internet non sécurisées déclenchent une exception dans les applications iOS 9 (sauf si vous l’avez explicitement autorisée).

À propos de App Transport Security

Comme indiqué ci-dessus, ATS garantit que toutes les communications Internet dans iOS 9 et OS X El Capitan sont conformes aux meilleures pratiques de connexion sécurisées, ce qui empêche la divulgation accidentelle d’informations sensibles directement via votre application ou une bibliothèque qu’elle consomme.

Pour les applications existantes, implémentez le protocole dans la HTTPS mesure du possible. Pour les nouvelles applications Xamarin.iOS, vous devez utiliser HTTPS exclusivement lors de la communication avec des ressources Internet. En outre, la communication d’API de haut niveau doit être chiffrée à l’aide de TLS version 1.2 avec secret de transfert.

Toute connexion établie avec NSUrl Connecter ion, CFUrl ou NSUrlSession utilise ATS par défaut dans les applications créées pour iOS 9 et OS X 10.11 (El Capitan).

Comportement ATS par défaut

Étant donné que ATS est activé par défaut dans les applications créées pour iOS 9 et OS X 10.11 (El Capitan), toutes les connexions utilisant NSUrl Connecter ion, CFUrl ou NSUrlSession sont soumises aux exigences de sécurité ATS. Si vos connexions ne répondent pas à ces exigences, elles échouent avec une exception.

Configuration requise pour la Connecter ion ATS

ATS applique les exigences suivantes pour toutes les connexions Internet :

  • Tous les chiffrements de connexion doivent utiliser le secret de transfert. Consultez la liste des chiffrements acceptés ci-dessous.
  • Le protocole TLS (Transport Layer Security) doit être version 1.2 ou ultérieure.
  • Au moins une empreinte digitale SHA256 avec une clé RSA 2048 ou supérieure, ou une clé 256 bits ou plus Elliptic-Curve (ECC) doit être utilisée pour tous les certificats.

Là encore, étant donné que ATS est activé par défaut dans iOS 9, toute tentative d’établir une connexion qui ne répond pas à ces exigences entraîne la levée d’une exception.

Chiffrements compatibles ATS

Le type de chiffrement de secret avant suivant est accepté par les communications Internet sécurisées ATS :

  • TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
  • TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
  • TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
  • TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
  • TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
  • TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
  • TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
  • TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
  • TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
  • TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
  • TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA

Pour plus d’informations sur l’utilisation des classes de communication Internet iOS, consultez la référence de classe NSURL Connecter ion d’Apple ou la référence de classe NSURLSession.

Prise en charge d’ATS dans Xamarin.iOS

Étant donné que ATS est activé par défaut dans iOS 9 et OS X El Capitan, si votre application Xamarin.iOS ou n’importe quel service ou bibliothèque qu’elle utilise utilise établit une connexion à Internet, vous devez effectuer une action ou vos connexions entraînent une exception levée.

Pour une application existante, Apple vous suggère de prendre en charge le HTTPS protocole dès que possible. Si vous ne pouvez pas parce que vous vous connectez à un service web tiers qui ne prend pas en charge ou si la prise en charge HTTPSHTTPS serait irréalisable, vous pouvez refuser ATS. Pour plus d’informations, consultez la section Refus d’ATS ci-dessous.

Pour une nouvelle application Xamarin.iOS, vous devez utiliser HTTPS exclusivement lors de la communication avec des ressources Internet. Là encore, il peut y avoir des situations (comme l’utilisation d’un service web tiers) où cela n’est pas possible et que vous devrez désactiver ATS.

En outre, ATS applique la communication d’API de haut niveau à chiffrer à l’aide de TLS version 1.2 avec le secret avant. Pour plus d’informations, consultez les sections configuration requises pour les Connecter ion ATS et les chiffrements compatibles ATS ci-dessus.

Bien que vous ne connaissiez peut-être pas TLS (Transport Layer Security) il s’agit du successeur de SSL (Secure Socket Layer) et fournit une collection de protocoles de chiffrement pour appliquer la sécurité sur les connexions réseau.

Le niveau TLS est contrôlé par le service web que vous consommez et est donc en dehors du contrôle de l’application. HttpClient Le chiffrement ModernHttpClient TLS le plus élevé pris en charge par le serveur doit être automatiquement utilisé.

Selon le serveur auquel vous parlez (en particulier s’il s’agit d’un service tiers), vous devrez peut-être désactiver le secret de transfert ou sélectionner un niveau TLS inférieur. Pour plus d’informations, consultez la section Configuration des options ATS ci-dessous.

Important

App Transport Security ne s’applique pas aux applications Xamarin à l’aide d’implémentations HTTPClient gérées. Il s’applique aux connexions à l’aide des implémentations HTTPClient CFNetwork ou des implémentations HTTPClient NSURLSession uniquement.

Définition de l’implémentation HTTPClient

Pour définir l’implémentation HTTPClient utilisée par une application iOS, double-cliquez sur le projet dans le Explorateur de solutions pour ouvrir les options du projet. Accédez à build iOS et sélectionnez le type de client souhaité dans la liste déroulante d’implémentation HttpClient :

Définition des options de génération iOS

Gestionnaire managé

Le gestionnaire managé est le gestionnaire HttpClient entièrement managé qui a été fourni avec les versions précédentes de Xamarin.iOS et est le gestionnaire par défaut.

Avantages :

  • Il est le plus compatible avec Microsoft .NET et une version antérieure de Xamarin.

Inconvénients :

  • Il n’est pas entièrement intégré à iOS (par exemple, il est limité à TLS 1.0).
  • Il est généralement beaucoup plus lent que les API natives.
  • Il nécessite un code managé plus important et crée des applications plus volumineuses.

Gestionnaire CFNetwork

Le gestionnaire cfNetwork est basé sur l’infrastructure native CFNetwork .

Avantages :

  • Utilise l’API native pour améliorer les performances et les tailles exécutables plus petites.
  • Ajoute la prise en charge des normes plus récentes telles que TLS 1.2.

Inconvénients :

  • Nécessite iOS 6 ou version ultérieure.
  • Non disponible de watchOS.
  • Certaines fonctionnalités et options HttpClient ne sont pas disponibles.

Gestionnaire NSUrlSession

Le gestionnaire NSUrlSession est basé sur l’API native NSUrlSession .

Avantages :

  • Utilise l’API native pour améliorer les performances et les tailles exécutables plus petites.
  • Ajoute la prise en charge des normes plus récentes telles que TLS 1.2.

Inconvénients :

  • Nécessite iOS 7 ou version ultérieure.
  • Certaines fonctionnalités et options HttpClient ne sont pas disponibles.

Diagnostic des problèmes ATS

Lorsque vous tentez de vous connecter à Internet, directement ou à partir d’une vue web dans iOS 9, vous pouvez obtenir une erreur dans le formulaire :

App Transport Security a bloqué une charge de ressource HTTP (http://www.-the-blocked-domain.com) cleartext, car elle n’est pas sécurisée. Les exceptions temporaires peuvent être configurées via le fichier Info.plist de votre application.

Dans iOS9, App Transport Security (ATS) applique des connexions sécurisées entre les ressources Internet (telles que le serveur principal de l’application) et votre application. En outre, ATS nécessite la communication à l’aide du protocole et de la HTTPS communication d’API de haut niveau pour être chiffrée à l’aide de TLS version 1.2 avec secret avant.

Étant donné que ATS est activé par défaut dans les applications créées pour iOS 9 et OS X 10.11 (El Capitan), toutes les connexions utilisant NSURLConnectionou CFURLNSURLSession seront soumises aux exigences de sécurité ATS. Si vos connexions ne répondent pas à ces exigences, elles échouent avec une exception.

Apple fournit également l’exemple d’application TLSTool qui peut être compilée (ou éventuellement transcodée en Xamarin et C#) et utilisée pour diagnostiquer les problèmes ATS/TLS. Pour plus d’informations sur la façon de résoudre ce problème, consultez la section Opting-Out of ATS ci-dessous.

Configuration des options ATS

Vous pouvez configurer plusieurs fonctionnalités d’ATS en définissant des valeurs pour des clés spécifiques dans le fichier Info.plist de votre application. Les clés suivantes sont disponibles pour contrôler ATS (mis en retrait pour montrer comment elles sont imbriquées) :

NSAppTransportSecurity
    NSAllowsArbitraryLoads
    NSAllowsArbitraryLoadsInWebContent
    NSExceptionDomains
    <domain-name-for-exception-as-string>
        NSExceptionMinimumTLSVersion
        NSExceptionRequiresForwardSecrecy
        NSExceptionAllowsInsecureHTTPLoads
        NSRequiresCertificateTransparency
        NSIncludesSubdomains
        NSThirdPartyExceptionMinimumTLSVersion
        NSThirdPartyExceptionRequiresForwardSecrecy
        NSThirdPartyExceptionAllowsInsecureHTTPLoads

Chaque clé a le type et la signification suivants :

  • NSAppTransportSecurity (Dictionary) : contient toutes les clés et valeurs de paramètre pour ATS.
  • NSAllowsArbitraryLoads (Boolean) : si YES ATS est désactivé pour un domaine non répertorié dans NSExceptionDomains. Pour les domaines répertoriés, les paramètres de sécurité spécifiés sont utilisés.
  • NSAllowsArbitraryLoadsInWebContent (Boolean) : s’il YES permet aux pages web de se charger correctement pendant que la protection ATS (Apple Transport Security) est toujours activée pour le reste de l’application.
  • NSExceptionDomains (Dictionary) : collection de domaines qui et les paramètres de sécurité que ATS doit utiliser pour un domaine donné.
  • <domain-name-for-exception-as-string> (Dictionary) : collection d’exceptions pour un domaine donné (par exemple www.xamarin.com).
  • NSExceptionMinimumTLSVersion (String) : version TLS minimale comme l’une TLSv1.1TLSv1.0ou TLSv1.2 l’autre (qui est la valeur par défaut).
  • NSExceptionRequiresForwardSecrecy (Boolean) : si NO le domaine n’a pas besoin d’utiliser un chiffrement avec la sécurité de transfert. La valeur par défaut est YES.
  • NSExceptionAllowsInsecureHTTPLoads (Boolean) : si NO (valeur par défaut) toutes les communications avec ce domaine doivent se trouver dans le HTTPS protocole.
  • NSRequiresCertificateTransparency (Boolean) : si YES le protocole SSL (Secure Sockets Layer) du domaine doit inclure des données de transparence valides. La valeur par défaut est NO.
  • NSIncludesSubdomains (Boolean) : si YES ces paramètres remplacent tous les sous-domaines de ce domaine. La valeur par défaut est NO.
  • NSThirdPartyExceptionMinimumTLSVersion (String) : version TLS utilisée lorsque le domaine est un service tiers en dehors du contrôle du développeur.
  • NSThirdPartyExceptionRequiresForwardSecrecy (Boolean) : si YES un domaine tiers nécessite le secret avant.
  • NSThirdPartyExceptionAllowsInsecureHTTPLoads (Boolean) : si YES l’ATS autorise la communication non sécurisée avec des domaines tiers.

Désactivation d’ATS

Bien qu’Apple suggère fortement d’utiliser le HTTPS protocole et la communication sécurisée vers les informations basées sur Internet, il peut arriver que cela ne soit pas toujours possible. Par exemple, si vous communiquez avec un service web tiers ou que vous utilisez des publicités fournies par Internet dans votre application.

Si votre application Xamarin.iOS doit effectuer une demande à un domaine non sécurisé, les modifications suivantes apportées au fichier Info.plist de votre application désactivent les valeurs par défaut de sécurité appliquées par ATS pour un domaine donné :

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>www.the-domain-name.com</key>
        <dict>
            <key>NSExceptionMinimumTLSVersion</key>
            <string>TLSv1.0</string>
            <key>NSExceptionRequiresForwardSecrecy</key>
            <false/>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <key>NSIncludesSubdomains</key>
            <true/>
        </dict>
    </dict>
</dict>

Dans Visual Studio pour Mac, double-cliquez sur le Info.plist fichier dans le Explorateur de solutions, basculez vers la vue Source et ajoutez les clés ci-dessus :

Vue Source du fichier Info.plist après l’ajout de clés spécifiées.

Si votre application doit charger et afficher du contenu web à partir de sites non sécurisés, ajoutez les éléments suivants au fichier Info.plist de votre application pour permettre aux pages web de charger correctement pendant que la protection Apple Transport Security (ATS) est toujours activée pour le reste de l’application :

<key>NSAppTransportSecurity</key>
<dict>
    <key> NSAllowsArbitraryLoadsInWebContent</key>
    <true/>
</dict>

Si vous le souhaitez, vous pouvez apporter les modifications suivantes au fichier Info.plist de votre application pour désactiver complètement ATS pour tous les domaines et la communication Internet :

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

Dans Visual Studio pour Mac, double-cliquez sur le Info.plist fichier dans le Explorateur de solutions, basculez vers la vue Source et ajoutez les clés ci-dessus :

Vue source du fichier Info.plist après avoir spécifié NSAllowsArbitraryLoadsInWebContent et NSAllowsArbitraryLoads.

Important

Si votre application nécessite une connexion à un site web non sécurisé, vous devez toujours entrer le domaine en tant qu’exception à l’aide NSExceptionDomains d’ATS au lieu de désactiver complètement ATS à l’aide NSAllowsArbitraryLoads. NSAllowsArbitraryLoads ne doit être utilisé que dans des situations d’urgence extrêmes.

Là encore, la désactivation d’ATS ne doit être utilisée qu’en dernier recours, si le passage à des connexions sécurisées n’est pas disponible ou n’est pas pratique.

Résumé

Cet article a introduit App Transport Security (ATS) et décrit la façon dont il applique des communications sécurisées avec Internet. Tout d’abord, nous avons abordé les modifications requises par ATS pour une application Xamarin.iOS s’exécutant sur iOS 9. Nous avons ensuite abordé le contrôle des fonctionnalités et des options ATS. Enfin, nous avons abordé la désactivation d’ATS dans votre application Xamarin.iOS.