web-dev-qa-db-fra.com

Demande HTTPS sous iOS 9: échec du chargement HTTP NSURLSession/NSURLConnection (kCFStreamErrorDomainSSL, -9802)

Je suis en train de mettre à jour mon application pour prendre en charge le nouveau ATS d'Apple. Sans aucune modification apportée à Plist-Info, le code suivant génère une erreur à sendSynchronousRequest() dans un simulateur Vanilla `iOS 9.

NSURL *url  =[NSURL URLWithString:@"https://Google.com"];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc]init];
[request setHTTPMethod:@"GET"];
[request setURL:url];

NSURLResponse *urlResponse = nil;
NSError *error = nil;    
NSData *reponse = [NSURLConnection sendSynchronousRequest:request
                                        returningResponse:&urlResponse
                                                    error:&error];

Erreur:

Échec du chargement HTTP de NSURLSession/NSURLConnection (kCFStreamErrorDomainSSL, -9802)

Avez-vous des idées sur ce qui pourrait être derrière ce problème? 

Ps: Je comprends que NSURLConnection est obsolète. Mais ces invocations fonctionnent si j'ajoute AllowArbitraryLoads dans Plist

13
Vignesh Murugesan

NSURLSession/NSURLConnection Le chargement HTTP a échoué (kCFStreamErrorDomainSSL, -9802) Correspond au serveur ne prenant pas en charge le "transfert de secret".

Pour contourner ce problème, ajoutez une exception de domaine au fichier .plist comme suit:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>test.testdomain.com</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSTemporaryExceptionRequiresForwardSecrecy</key>
            <false/>
        </dict>
    </dict>
</dict>
13
Vignesh Murugesan

Ajoutez une nouvelle ligne dans votre fichier plist.

 Add a new row in your plist file

9
pkc456

J'ai ajouté ce code dans info.plist pour autoriser toute requête http:

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

Cet article répertorie toutes les modifications apportées par Apple pour iOS 9 et leurs implémentations:

http://ste.vn/2015/06/10/configuring-app-transport-security-ios-9-osx-10-11/

6
delarcomarta

Si votre application comprend une page H5, elle aura parfois aussi cette erreur.
Il faut non seulement activer Allow Arbitrary Loads pour le réparer, mais également ajouter du code ci-dessous dans votre appDelegate.m:


@implementation NSURLRequest(ATS)
+ (BOOL)allowsAnyHTTPSCertificateForHost:(NSString *)Host
{
    return YES;
}
@end
0
scorpiozj

Selon cela: https://forums.developer.Apple.com/message/36842#36842

L'exception correcte pour corriger le chargement HTTP a échoué (kCFStreamErrorDomainSSL, -9802) est:

NSExceptionAllowsInsecureHTTPLoads 
0
spirographer

Ajoutez ce qui suit au fichier info.plist. Et remplacez "My_Base_Url.com" par l'URL de base de votre lien de service Web. Cela devrait faire l'affaire.

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>My_Base_Url.com</key>
        <dict>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <key>NSExceptionMinimumTLSVersion</key>
            <string>TLSv1.2</string>
            <key>NSExceptionRequiresForwardSecrecy</key>
            <true/>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSRequiresCertificateTransparency</key>
            <false/>
            <key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key>
            <false/>
            <key>NSThirdPartyExceptionMinimumTLSVersion</key>
            <string>TLSv1.2</string>
            <key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
            <true/>
        </dict>
    </dict>
</dict>
0
Lazy