2011-02-18 53 views
27

Estoy tratando de establecer una conexión HTTPS a un servidor utilizando mi aplicación. Pero la conexión falla debido al siguiente errorError de SSL en la conexión al servidor a través del iPhone

Error Domain = NSURLErrorDomain Code = -1200 "Se ha producido un error SSL y no se puede establecer una conexión segura con el servidor." UserInfo = 0x612eb30 {NSErrorFailingURLStringKey = https: myURL.com/signup, NSLocalizedRecoverySuggestion = ¿Desea conectarse al servidor de todos modos ?, NSErrorFailingURLKey = https: myURL.com/signup, NSLocalizedDescription = Se ha producido un error de SSL y una conexión segura al servidor servidor no puede hacerse., NSUnderlyingError = 0x612eb70 "se ha producido un error SSL y una conexión segura con el servidor no puede ser hecho."}

el código para conectarse al servidor es

-(IBAction) handleEvents:(id)sender 
{ 
    if ((UIButton*)sender == submit) { 

    [UIApplication sharedApplication].networkActivityIndicatorVisible = YES; 


    NSLog(@"Begin"); 
    NSData *urlData; 
    NSURLResponse *response; 
    NSError *error; 

    NSString *url =[[NSString alloc]initWithFormat:@"%@signup",baseURL]; 
    NSURL *theURL =[NSURL URLWithString:url]; 
    NSMutableURLRequest *theRequest =[NSMutableURLRequest requestWithURL:theURL cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:0.0f]; 
    [theRequest setHTTPMethod:@"POST"]; 
    NSString *theBodyString = [NSString stringWithFormat:@"emailId=%@&mobileNumber=%@&appId=%@&password=%@&firstName=%@&lastName=%@" 
           ,@"[email protected]",@"919879876780",@"bf1c7a6b3d266a7fe350fcfc4dda275211c13c23" ,@"qwerty" , @"Dev" , @"Sri"]; 
    NSData *theBodyData = [theBodyString dataUsingEncoding:NSUTF8StringEncoding]; 

    [theRequest setHTTPBody:theBodyData]; 
    urlData = [NSURLConnection sendSynchronousRequest:theRequest returningResponse:&response error:&error]; 
    } 
} 

mi delegado los métodos son

- (void)handleError:(NSError *)error 
{ 
NSLog(@"----->%@",error); 
} 

- (void)connectionDidFinishLoading:(NSURLConnection *)connection 
{ 
    [UIApplication sharedApplication].networkActivityIndicatorVisible = NO; 

} 

- (BOOL)connection:(NSURLConnection *)connection canAuthenticateAgainstProtectionSpace:(NSURLProtectionSpace *)protectionSpace { 
    return [protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]; 
    } 

- (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge (NSURLAuthenticationChallenge *)challenge { 
    NSLog(@"check auth"); 
    [challenge.sender continueWithoutCredentialForAuthenticationChallenge:challenge]; 
    } 

Estoy atrapado aquí y no pude encontrar ninguna salida.

Cualquier forma de ayuda sería muy apreciada.

gracias de antemano!

Respuesta

13

Dado que ha quedado sin respuesta durante mucho tiempo y mi investigación y desarrollo actual indican que el código está perfectamente bien para la conexión, es el certificado en el servidor que no fue firmado por una CA autorizada. por lo que cualquiera que tenga ese tipo de problema compruebe que el certificado sea válido al final del servidor o no.

Espero que esto ayude !!

+1

¿Cómo resolver esto para el desarrollo local? –

+0

No es un problema de CA, solo porque la versión de SSL es demasiado baja. –

-4

Pruebe la dirección web con safari del teléfono.

-1

Puede usar esto.

[NSURLRequest setAllowsAnyHTTPSCertificate:YES forHost:str]; 

Esto permitirá capa ssl para aceptar el certificado incluso si el sujeto en el certificado no es igual para el huésped.

Ésta es la manera antigua de iOS 5 a 7

Esperanza esta ayuda !!

+4

Aconsejo en contra de esto. Consulte https://developer.apple.com/library/ios/technotes/tn2232/_index.html para conocer la advertencia de Apple. Esta no es una API pública. –

41

iOS 9 obliga a las conexiones que usan HTTPS a ser TLS 1.2 para evitar vulnerabilidades recientes. En iOS 8, incluso las conexiones HTTP no encriptadas eran compatibles, por lo que las versiones anteriores de TLS tampoco creaban ningún problema. Como solución, puede agregar este fragmento de código en su Info.plist:

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

De esta manera usted está desactivando la seguridad del transporte de aplicaciones. Espero que sea útil.

+1

Si está nervioso por desactivar App Transport Security para todos los dominios, puede hacerlo para dominios específicos: https://studio76.pro/configuring-app-transport-security-exceptions-in-ios-9-and- osx-10-11/ – sirvine

+2

Para fines de desarrollo, está bien, pero cuando se envía a la tienda de aplicaciones no es aceptable. – damithH

4

Echa un vistazo a esta página: https://github.com/vinhnx/iOS-issues/issues/1

En pocas palabras: La razón es que, a partir de iOS9 y OSX 10.11 todas las aplicaciones construidas sobre XCode7 requerirán TLS 1.2 para conexión SSL, y no por lo de antes protocolos.
Existen varios métodos para solucionar este problema.
"NSAppTransportSecurity -> NSAllowsArbitraryLoads" enfoque no es bueno, ya que deshabilitará TLS 1.2 para todas las conexiones desde su aplicación, y esto puede llevar al rechazo de su aplicación por parte de Apple.
El enfoque de "Excepciones por dominio" es mucho mejor.

+1

Gran respuesta. Tuve el problema para la integración de Weibo y una vez que ingresé 'TLSv1.0' funcionó. Gracias. – jfgrang

2

Tal vez el dispositivo tiene una fecha equivocada & tiempo :)

0

que estaba usando iOS 9.3.1 y estaba usando https cuando llegué a este problema. Funcionó bien a través del simulador, pero falló en mi iPad. La razón es porque mi iPad tenía WiFi habilitado y se había conectado a la red de invitados de mi empresa, pero no había recibido el sitio web emergente donde acepto ingresar a la red. Después de aceptar todo, todo funcionó bien nuevamente.

-2

Incluso yo estaba enfrentando el mismo problema.

Este problema puede ocurrir si el certificado SSL sobre el servidor es un certificado privado. En tal caso, puede resolverlo usando this.

0

Por favor, asegúrese de que la versión de TLS es 1.2, no TLS 1.0.

Aplicaciones construidas sobre XCode8 requerirá TLS 1.2 para la conexión SSL

Cuestiones relacionadas