it-swarm.com.de

Das Laden von NSURLConnection/CFURLConnection-HTTP ist fehlgeschlagen (kCFStreamErrorDomainSSL, -9813). IOS

Derzeit konsumiere ich einen Soap-Webservice mit Block in ios. Mein Quellcode lautet wie folgt

NSString *xml = requestXMLToSent;

NSString *msgLength = [NSString stringWithFormat:@"%lu", (unsigned long)[xml length]];
NSURL *serviceURL = [NSURL URLWithString: url];
NSMutableURLRequest *urlRequest = [NSMutableURLRequest requestWithURL:serviceURL];

[urlRequest addValue:@"text/xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
[urlRequest addValue: serviceURL forHTTPHeaderField:@"SOAPAction"];
[urlRequest addValue:msgLength  forHTTPHeaderField:@"Content-Length"];
[urlRequest setHTTPBody: [xml dataUsingEncoding:NSUTF8StringEncoding]];
[urlRequest setHTTPMethod:@"POST"];

[NSURLConnection sendAsynchronousRequest:urlRequest queue:[[NSOperationQueue alloc]init] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {


    if (connectionError == NULL) {

        NSHTTPURLResponse * httpResponse = (NSHTTPURLResponse *) response;
        NSInteger statuscode = httpResponse.statusCode;
        if (statuscode == 200) {

            NSString *responseString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
            NSLog(@"response String  : %@",responseString);


        }else{
            NSLog(@"%@",response);

        }




    }else{

        NSLog(@"There is an error in URL connection and the Error is : %@",connectionError);
    }

Ich erhalte folgende error @ console 

NSURLConnection/CFURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9813)

Bei der URL-Verbindung ist ein Fehler aufgetreten, und der Fehler lautet: Fehler Domain = NSURLErrorDomain Code = -1202 "Das Zertifikat für diesen Server ist ungültig. Möglicherweise stellen Sie eine Verbindung zu einem Server her, der vorgibt," www.xxxxxxxx.net "zu sein gefährden Sie Ihre vertraulichen Informationen. " UserInfo = 0x10948bbb0 {NSUnderlyingError = 0x109470d10 "Das Zertifikat für diesen Server ist ungültig. Möglicherweise stellen Sie eine Verbindung zu einem Server her, der vorgibt," www.xxxxxx.net "zu sein, was Ihre vertraulichen Informationen gefährden kann.", NSErrorFailingURLStringKey = https: // www -------------------------------, NSErrorFailingURLKey = https: // ----- -------------------- NSLocalizedRecoverySuggestion = Möchten Sie trotzdem eine Verbindung zum Server herstellen?, NSURLErrorFailingURLPeerTrustErrorKey =, NSLocalizedDescription = Das Zertifikat für diesen Server ist ungültig. Möglicherweise stellen Sie eine Verbindung zu einem Server her, der vorgibt, "www.xxxxxx.net" zu sein, wodurch Ihre vertraulichen Informationen gefährdet werden können.}

Screenshot of error

9
Sumit Patel

Server wirft SSL certificate error . Zum Testen können Sie der appDelegate den folgenden Code hinzufügen:. + (BOOL)allowsAnyHTTPSCertificateForHost:(NSString *)Host { return YES; }

Dadurch wird der SSL-Fehler umgangen

Hinweis: Funktioniert für NSURLConnection und UIWebView, jedoch nicht für WKWebView.

Bearbeitet:

Bei iOS 9 funktioniert das oben beschriebene Verfahren nicht. Fügen Sie in info.plist das folgende Snippet hinzu:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>
11
Shanu ji

Ich gehe davon aus, dass Sie das https-Schema in Ihrer serviceURL verwenden und Ihr Testserver Probleme mit dem SSL-Zertifikat hat. Wenn dies der Fall ist und Sie vertrauen, implementieren Sie die folgenden Methoden in Ihrem NSURLConnection-Delegaten:

- (BOOL)connection:(NSURLConnection *)connection canAuthenticateAgainstProtectionSpace:(NSURLProtectionSpace *)protectionSpace {
    return YES;
}

- (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge {
    if([challenge.protectionSpace.Host isEqualToString:@"127.0.0.1"] /*check if this is Host you trust: */ )
       [challenge.sender useCredential:[NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust] forAuthenticationChallenge:challenge];
}

Damit ein Delegat Ihre NSURLConnection zum Beispiel mit der initWithRequest:delegate:startImmediately:-Methode initialisiert.

8
user2260054

Fügen Sie in iOS 9.0 Folgendes zu info.plist hinzu

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

Überprüfen Sie, ob Ihre Delegierten tatsächlich angerufen werden.

Diese Dokumentation erklärt, dass Ihre Delegierten unter bestimmten Umständen möglicherweise nicht angerufen werden.

https://developer.Apple.com/library/ios/documentation/Cocoa/Conceptual/URLLoadingSystem/Articles/AuthenticationChallenges.html

Wichtig: Die Systemklassen zum Laden von URLs rufen ihre Delegaten nicht zur Bearbeitung von Anforderungsherausforderungen auf, es sei denn, die Serverantwort enthält einen WWW-Authenticate-Header. Andere Authentifizierungstypen wie Proxy-Authentifizierung und TLS-Vertrauensvalidierung erfordern diesen Header nicht.

0
user1951992