web-dev-qa-db-fra.com

kCFStreamErrorDomainSSL, -9802 lors de la connexion à un serveur par adresse IP via HTTPS dans iOS 9

Nous avons une application iOS qui se connecte à notre serveur via HTTPS. Lorsque l'application est créée avec le nouveau SDK iOS 9 et exécutée sous iOS 9, l'erreur suivante se produit:

NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9802)

L'application utilise AFNetworking 1.3.4 avec des certificats épinglés. Le problème se produit si je me connecte au serveur avec son adresse IP. Cela fonctionne si j'ajoute la configuration NSAllowsArbitraryLoads , ou si je me connecte au serveur avec son nom de domaine.

Le connecteur Tomcat est configuré avec sslEnabledProtocols = "TLSv1, TLSv1.1, TLSv1.2".

J'ai essayé en remplaçant le nom d'hôte mais cela ne semble rien changer.

Je ne trouve pas encore beaucoup de documentation officielle sur ATS. Peut-être que la connexion avec l'adresse IP n'est pas censée fonctionner?

23
Ryan Fung

iOS9 requiert que le serveur ne prenne en charge que TLSv1.2 et prenne en charge une sécurité avancée parfaite.

L'application doit également prendre en charge IPV6, y compris ne pas utiliser d'adresses IP codées en dur. Il est suggéré d'utiliser NSURLSession. Sinon, des ajouts d'exception doivent être effectués dans la liste d'applications.

Voir la session WWDC-15 "La sécurité et vos applications".

Voir aussi Blog de Steven Peterson pour plus de détails.

29
zaph

Vous pouvez l'ajouter dans votre fichier "Info.plist", cela permettra des connexions non sécurisées:

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

J'ai trouvé une autre réponse de débordement de pile avec une liste de contrôle des nouvelles exigences exactes sur le serveur pour remplir pleinement les exigences de sécurité du transport par défaut d'iOS 9: Liste de contrôle des exigences du serveur de sécurité iOS 9

J'espère que ça t'as aidé.

3
Litome

Je suis resté coincé sur celui-ci pendant un certain temps et j'ai essayé toutes les astuces dans Info.plist mais j'ai toujours l'erreur:

HTTP load failed (kCFStreamErrorDomainSSL, -9813)

lorsque vous essayez de vous connecter à un serveur localhost en cours de développement.

Développer localement avec un projet natif réactif se connectant à une API servie avec un certificat auto-signé J'ai eu mon système configuré pour faire confiance au certificat mais il m'a fallu un certain temps pour réaliser que j'avais également besoin du simulateur IOS pour accepter mon certificat comme approuvé pour surmonter cette erreur.

Dans l'écran d'accueil de votre simulateur, vous devriez pouvoir faire glisser le fichier cert dans le simulateur pour l'inviter à ajouter le profil de certificat. Ou, si le certificat est accessible via une URL localhost dans le navigateur safari du simulateur, vous pouvez l'accepter via safari.

J'espère que cela aide quelqu'un alors que je tourne en rond avant qu'il ne clique pour moi!

2
DamienB

Solution 1:

Si vous recherchez work around puis utilisez l'approche ci-dessous:

  1. Ajouter NSAllowsArbitraryLoads clé de type booléen avec la valeur vrai .

Votre fichier Info.plist devrait ressembler à ceci:

Screenshot 1

Cependant, cette approche n'est pas recommandée car elle autorise toutes les connexions non sécurisées.

Solution 2:

Le SSL certificate that you apply on Server should be of type TLSv2.0 minimum since iOS 10 requires this. Vérifiez ceci lien pour plus de détails.

  1. Ajouter NSIncludesSubdomains clé de type booléen avec la valeur vrai
  2. Ajouter NSTemporaryExceptionAllowsInsecureHTTPLoads clé de type booléen avec valeur vrai
  3. Ajouter NSTemporaryExceptionMinimumTLSVersion clé de type Chaîne avec valeur TLSv1.2

Votre fichier Info.plist devrait ressembler à ceci:

Screenshot 2

1
Jayprakash Dubey