NSURLConnection / CFURLConnection Carga HTTP fallida (kCFStreamErrorDomainSSL, -9813) iOS

Actualmente estoy consumiendo un servicio web de soap usando block in ios mi código fuente es el siguiente

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); } 

Recibo el siguiente error @ console

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

Hay un error en la conexión de URL y el error es: Dominio de error = NSURLErrorDomain Code = -1202 “El certificado para este servidor no es válido. Es posible que se esté conectando a un servidor que pretende ser” www.xxxxxxxx.net “que podría ponga en riesgo su información confidencial “. UserInfo = 0x10948bbb0 {NSUnderlyingError = 0x109470d10 “El certificado para este servidor no es válido. Es posible que se conecte a un servidor que se haga pasar por” www.xxxxxx.net “, lo que podría poner en riesgo su información confidencial.”, NSErrorFailingURLStringKey = https: // www .———————————-, NSErrorFailingURLKey = https: // —– ——————– NSLocalizedRecoverySuggestion = ¿Desea conectarse al servidor de todos modos ?, NSURLErrorFailingURLPeerTrustErrorKey =, NSLocalizedDescription = El certificado para este servidor no es válido. Es posible que se conecte a un servidor que pretende ser “www.xxxxxx.net”, lo que podría poner en riesgo su información confidencial.}

Captura de pantalla del error

El servidor está arrojando un error de certificado SSL . Para realizar pruebas, puede agregar el siguiente código a la aplicaciónDelegar: + (BOOL)allowsAnyHTTPSCertificateForHost:(NSString *)host { return YES; } + (BOOL)allowsAnyHTTPSCertificateForHost:(NSString *)host { return YES; }

Esto omitirá el error de SSL

Nota: funciona para NSURLConnection y UIWebView, pero no para WKWebView

Editado:

Para iOS 9, el procedimiento anterior no funciona. Agregue el siguiente fragmento en info.plist:

 NSAppTransportSecurity  NSAllowsArbitraryLoads   

Supongo que usa el esquema https en su serviceURL y su servidor de prueba tiene problemas con el certificado SSL. Si es así y confía en él, implemente los siguientes métodos en su delegado de NSURLConnection :

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

Para que un delegado inicialice su NSURLConnection por ejemplo, con initWithRequest:delegate:startImmediately: method.

En iOS 9.0, agregue lo siguiente a info.plist

 NSAppTransportSecurity  NSAllowsArbitraryLoads  

Verifica que tus delegates sean realmente llamados.

Esta documentación explica que sus delegates pueden no ser llamados en ciertas circunstancias.

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

Importante: las clases del sistema de carga de URL no llaman a sus delegates para manejar desafíos de solicitud a menos que la respuesta del servidor contenga un encabezado WWW-Authenticate. Otros tipos de autenticación, como la autenticación proxy y la validación de confianza TLS, no requieren este encabezado.