6

staram się spożywać zapewnić spokojny usługę, która daje błądiPhone: bezpieczny serwer pozwala wypocząć „Certyfikat dla tego serwera jest nieprawidłowy

Error = Błąd Domain = kod NSURLErrorDomain = -1202” Certyfikat dla tego serwera jest nieprawidłowy . Możliwe, że łączysz się z serwerem, który podszywa się pod "xxx.xxx.xxx.xxx", co może narazić Twoje poufne informacje na ryzyko. "

działa na XCode 4.2, gdzie jest błąd lub brak jakiegokolwiek kroku.

użyciu następujących kodu

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

Rozwiązałbym to, ustawiając odpowiednią datę i godzinę dla mojego urządzenia. – Hemang

+0

Rozwiązano ten sam problem z ustawianiem daty i czasu urządzeń na automatyczne. –

Odpowiedz

13

Uważam, że może to być spowodowane DNS. Coś takiego jak twój serwer nie jest zarejestrowane lub inne.

wypróbować to na tym specjalnie Development

EDIT:

Utwórz "NSURLRequest + NSURLRequestSSLY.h" plik i dodać te linie do niego

#import <Foundation/Foundation.h> 

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

@end 

Utwórz „NSURLRequest + NSURLRequestSSLY .m "plik i dodaj do niego następujące linie:

#import "NSURLRequest+NSURLRequestSSLY.h" 

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

@end 

I nie dla usuń ją, ponieważ Twoja aplikacja może zostać odrzucona.

+0

daje #import "NSURLRequest + NSURLRequestSSLY.h" plik nie znaleziono błąd? – Azhar

+0

edytowałem odpowiedź teraz. –

+1

Działa dobrze dla mnie. – aroth

8

Awaria nie występuje w kodzie. Używasz serwera HTTPS, który nie udostępnia znanego certyfikatu. Jeśli sam skonfigurowałeś serwer, musisz iść i kupić zaświadczony certyfikat od jednego z dużych urzędów certyfikacji, które są zaufane przez iOS i większość innych systemów operacyjnych.

Do celów programistycznych można przetestować usługę REST, ignorując niezaufany certyfikat. Postępuj zgodnie z tym przewodnikiem: http://www.cocoanetics.com/2009/11/ignoring-certificate-errors-on-nsurlrequest/

Ale do użytku produkcyjnego zalecam nie używać tej metody, ponieważ spowoduje to wyciek bezpieczeństwa do aplikacji. Jeśli ignorujesz zabezpieczenia, możesz także użyć HTTP zamiast HTTPS.

+0

To jest lepsze .. –

+0

Ale to jest używanie prywatnego API i aplikacja Apply could Reject Application z tego powodu, czy możesz pomóc z niektórymi publicznymi API, takimi jak ten, którego używałem, ale mając problemy z jego rozwiązaniem – Azhar

+0

ASIHttpRequest ma prosty BOOL właściwość, która wyłącza walidację certyfikacyjną. Może przyjrzeć się źródłu projektu lub po prostu użyć ASIHttpRequest zamiast NSURLRequest. – miho

0

Próbowałem kilka sposobów i okazało się, że jest to związane z certyfikatem centrum programistów Apple. Uaktualnij obsługę administracyjną i spróbuj ponownie. Próbowałem wysyłać dane za pomocą iPada, iPhone'a 5 i 5S, ale iPhone 4. Gdy zaktualizuję moją instalację i instalację na moim iPhone 4, działa z tym problemem.

Powiązane problemy