wake-up-neo.com

HTTPS-Anforderung in iOS 9: HTTP-Laden von NSURLSession/NSURLConnection schlug fehl (kCFStreamErrorDomainSSL, -9802)

Ich aktualisiere meine App, um Apples neues ATS aufzunehmen. Ohne Änderungen an der Plist-Info gibt der folgende Code einen Fehler bei sendSynchronousRequest() in einem Vanilla `iOS 9-Simulator aus.

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];

Error:

NSURLSession/NSURLConnection-HTTP-Laden fehlgeschlagen (kCFStreamErrorDomainSSL, -9802)

Irgendwelche Gedanken, was hinter dieser Ausgabe stehen könnte? 

Ps: Ich verstehe, dass NSURLConnection veraltet ist. Aber diese Aufrufe funktionieren, wenn ich AllowArbitraryLoads in Plist hinzufüge. 

13

Das HTTP-Laden von NSURLSession/NSURLConnection ist fehlgeschlagen (kCFStreamErrorDomainSSL, -9802).

Um dies zu umgehen, fügen Sie der .plist-Datei wie folgt eine Domänenausnahme hinzu:

<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

Fügen Sie Ihrer Plist-Datei eine neue Zeile hinzu.

 Add a new row in your plist file

9
pkc456

Ich habe diesen Code in die info.plist eingefügt, um jede Anfrage http zuzulassen:

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

In diesem Artikel werden alle von Apple für iOS 9 vorgenommenen Änderungen und ihre Implementierungen aufgeführt:

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

6
delarcomarta

Wenn Ihre App eine H5-Seite enthält, wird manchmal auch dieser Fehler angezeigt.
Sie müssen nicht nur Allow Arbitrary Loads einschalten, um das Problem zu beheben, sondern auch den folgenden Code in Ihrer appDelegate.m hinzufügen:


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

Entsprechend diesem: https://forums.developer.Apple.com/message/36842#36842

Die korrekte Ausnahme zum Fixieren der HTTP-Last ist fehlgeschlagen (kCFStreamErrorDomainSSL, -9802):

NSExceptionAllowsInsecureHTTPLoads 
0
spirographer

Fügen Sie der Datei info.plist Folgendes hinzu. Und ersetzen Sie "My_Base_Url.com" durch die Basis-URL Ihres Web-Service-Links. Das sollte den Trick tun.

<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