6

Estoy tratando de consumir asegurar el servicio de descanso que da erroriPhone: restfull servidor seguro "El certificado para este servidor no es válido

Error = Error de dominio = Código NSURLErrorDomain = -1,202" El certificado para este servidor no es válido . Es posible que se esté conectando a un servidor que pretende ser "xxx.xxx.xxx.xxx" que podría poner en riesgo su información confidencial. "

trabajando en xCode 4.2, donde es el error o falta de un paso.

usando siguiente código

RegisterUser.f

@interface RegisterUser : UIViewController<UITextFieldDelegate, 
UIScrollViewDelegate, NSURLConnectionDelegate> 

RegisterUser.m

- (IBAction)SubmitBtnAction:(id)sender { 

    NSURL *url = [NSURL URLWithString:@"https://xx.xx.xx.xxx:8223/jaxrs/tunedoorgateway/getCountries"]; 
    NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url]; 

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

     if ([data length] >0 && error == nil) 
     { 
      NSLog(@"Data = %@", data); 
      // DO YOUR WORK HERE 

     } 
     else if ([data length] == 0 && error == nil) 
     { 
      NSLog(@"Nothing was downloaded."); 
     } 
     else if (error != nil){ 
      NSLog(@"Error = %@", error); 
     } 

    }]; 

} 


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


- (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge 
{ 
// if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]) 
//  if ([trustedHosts containsObject:challenge.protectionSpace.host]) 
      [challenge.sender useCredential:[NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust] forAuthenticationChallenge:challenge]; 

    [challenge.sender continueWithoutCredentialForAuthenticationChallenge:challenge]; 
    NSLog(@"This is didReceiveAuthenticationChallenge"); 
    // [[challenge sender] cancelAuthenticationChallenge:challenge]; 
} 
+1

Resolvería esto configurando la fecha y la hora adecuadas para mi dispositivo. – Hemang

+0

Resolvió el mismo problema con solo configurar la fecha y hora de los dispositivos en automático. –

Respuesta

13

Creo que esto podría deberse a DNS. Algo como su servidor no está registrado o algo así.

trate de usar esto para el desarrollo de propósito-

EDIT:

Crear un archivo "NSURLRequest + NSURLRequestSSLY.h" y añadir estas líneas para que

#import <Foundation/Foundation.h> 

@interface NSURLRequest (NSURLRequestSSLY) 
+(BOOL)allowsAnyHTTPSCertificateForHost:(NSString*)host; 

@end 

Crear una "NSURLRequest + NSURLRequestSSLY archivo ".m" y agregue estas líneas a él

#import "NSURLRequest+NSURLRequestSSLY.h" 

@implementation NSURLRequest (NSURLRequestSSLY) 
+(BOOL)allowsAnyHTTPSCertificateForHost:(NSString*)host 
{ 
    return YES; 
} 

@end 

Y no lo haga consigue eliminarlo ya que tu aplicación podría ser rechazada.

+0

da #import "NSURLRequest + NSURLRequestSSLY.h" ¿No encontró el archivo de error? – Azhar

+0

han editado la respuesta ahora. –

+1

Funciona bien para mí. – aroth

8

La falla no está en su código. Está utilizando un servidor HTTPS que no proporciona un certificado conocido. Si ha configurado el servidor usted mismo, debe comprar un certificado chamuscado de una de las principales autoridades certificadoras que son de confianza para iOS y la mayoría de los otros sistemas operativos.

Para fines de desarrollo, puede probar su servicio REST ignorando el certificado no confiable. Siga esta guía para hacer eso: http://www.cocoanetics.com/2009/11/ignoring-certificate-errors-on-nsurlrequest/

Pero para el uso en producción, le recomiendo que no utilice este método, ya que traerá una fuga de seguridad a su aplicación. Si ignora la seguridad, también puede usar HTTP en lugar de HTTPS.

+0

Esto es mucho mejor ... –

+0

Pero esto está usando una API privada y Aplicar podría rechazar la aplicación debido a esto, ¿me pueden ayudar con alguna API pública, como la que yo usé pero que tiene problemas para resolverla? – Azhar

+0

ASIHttpRequest tiene un BOOL simple propiedad que desactiva la validación de la certificación. Tal vez eche un vistazo a la fuente del proyecto o simplemente use ASIHttpRequest en lugar de NSURLRequest. – miho

0

He intentado de varias maneras y descubrí que está relacionado con el certificado del centro de desarrolladores de Apple. Actualiza tu aprovisionamiento e inténtalo de nuevo. He intentado publicar datos con iPad, iPhone 5 y 5S pero iPhone 4. Cuando tengo la actualización de mi aprovisionamiento e instalación en mi iPhone 4, funciona con el problema ahora.

Cuestiones relacionadas