6

Sto cercando di consumare garantire il servizio riposante che dà erroreiphone: Server restfull sicuro "Il certificato per questo server non è valido

errore = errore di dominio = Codice NSURLErrorDomain = -1202" Il certificato per questo server non è valido . Potresti collegarti a un server che pretende di essere "xxx.xxx.xxx.xxx" che potrebbe mettere a rischio le tue informazioni riservate. "

che lavora su xCode 4.2, dov'è l'errore o qualsiasi passo mancante.

utilizzando seguente codice

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

risolverei questo impostando la data e l'ora corrette per il mio dispositivo. – Hemang

+0

Risolto lo stesso problema con la semplice impostazione di data e ora dei dispositivi su automatico. –

risposta

13

Ritengo che ciò potrebbe essere dovuto al DNS. Qualcosa come il tuo server non è registrato o alcuni.

provare a utilizzare questo per scopo- di sviluppo

EDIT:

Creare un file "NSURLRequest + NSURLRequestSSLY.h" e aggiungere queste righe ad esso

#import <Foundation/Foundation.h> 

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

@end 

Crea un "NSURLRequest + NSURLRequestSSLY .m "e aggiungere queste righe

#import "NSURLRequest+NSURLRequestSSLY.h" 

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

@end 

E non per rimuoverlo poiché l'app potrebbe essere rifiutata.

+0

fornisce #import "NSURLRequest + NSURLRequestSSLY.h" errore file non trovato? – Azhar

+0

hanno modificato la risposta ora. –

+1

funziona bene per me. – aroth

8

L'errore non è nel codice. Si sta utilizzando un server HTTPS che non fornisce un certificato noto. Se hai configurato tu stesso il server, devi acquistare un certificato inedito da una delle grandi autorità di certificazione che sono affidabili da iOS e dalla maggior parte degli altri sistemi operativi.

Per scopi di sviluppo è possibile testare il servizio REST ignorando il certificato non attendibile. Seguire questa guida per farlo: http://www.cocoanetics.com/2009/11/ignoring-certificate-errors-on-nsurlrequest/

Ma per l'uso di produzione, si consiglia di non utilizzare questo metodo poiché causerà una perdita di sicurezza all'applicazione. Se ignori la sicurezza, puoi semplicemente utilizzare HTTP invece di HTTPS.

+0

Questo è molto meglio .. –

+0

Ma questo sta usando API private e Apply potrebbe Rifiutare l'applicazione a causa di questo, puoi aiutare con qualche API pubblica, come quella che ho usato ma avendo problemi a risolverlo – Azhar

+0

ASIHttpRequest ha un semplice BOOL proprietà che disabilita la convalida della certificazione. Forse date un'occhiata all'origine del progetto o utilizzate semplicemente ASIHttpRequest invece di NSURLRequest. – miho

0

Ho provato in diversi modi e ho scoperto che è correlato al certificato del centro di sviluppo Apple. Aggiorna il provisioning e riprova. Ho provato a postare dati con iPad, iPhone 5 e 5S ma iPhone 4. Quando ho aggiornato il mio provisioning e l'installazione sul mio iPhone 4, funziona con il problema ora.