2013-02-21 1 views
2

Я хочу войти с помощью веб-сервиса.Служба HTTPS не работает

Мой сайт основан на https. Я использую следующий учебник.

http://agilewarrior.wordpress.com/2012/02/01/how-to-make-http-request-from-iphone-and-parse-json-result/ 

Следующий код работает нормально.

responseData = [NSMutableData data]; 
NSURLRequest *request = [NSURLRequest requestWithURL: 
         [NSURL URLWithString:@"https://maps.googleapis.com/maps/api/place/search/json?location=-33.8670522,151.1957362&radius=500&types=food&name=harbour&sensor=false&key=AIzaSyAbgGH36jnyow0MbJNP4g6INkMXqgKFfHk"]]; 
[[NSURLConnection alloc] initWithRequest:request delegate:self]; 

но мой код

responseData = [NSMutableData data]; 
NSURLRequest *request = [NSURLRequest requestWithURL: 
         [NSURL URLWithString:@"https:myurl/login?userId=username&password=111111"]]; 
[[NSURLConnection alloc] initWithRequest:request delegate:self]; 

и это дает ошибку

Connection failed: Error Domain=NSURLErrorDomain Code=-1202 "The certificate for this server is invalid. You might be connecting to a server that is pretending to be --My URL-- which could put your confidential information at risk." UserInfo=0xa294260 {NSErrorFailingURLStringKey=https://mywebsite/login?userId=username&password=111111, NSLocalizedRecoverySuggestion=Would you like to connect to the server anyway?, NSErrorFailingURLKey=https://mywebsite/login?userId=username&password=111111, NSLocalizedDescription=The certificate for this server is invalid. You might be connecting to a server that is pretending to be --My URL-- which could put your confidential information at risk., NSUnderlyingError=0xa5befc0 "The certificate for this server is invalid. You might be connecting to a server that is pretending to be --My URL-- which could put your confidential information at risk.", NSURLErrorFailingURLPeerTrustErrorKey=<SecTrustRef: 0xa5768d0>} 

ответ

1

Это проблема с веб-сайта вы подключаетесь, а не код. Если у него нет известного сертификата, он будет рассматриваться как риск для безопасности.

+0

как его разрешить? – Arahim

+0

ohh Спасибо, Это очистило много. – Arahim

+0

Нет проблем. Я [нашел аналогичный вопрос] (http://stackoverflow.com/questions/12347410/iphone-secure-restfull-server-the-certificate-for-this-server-is-invalid), который может помочь вам, кажется как будто у него есть некоторые соответствующие ответы. Есть способ игнорировать это, что и есть кто-то другой, размещенный здесь, но не рекомендуется. – JMarsh

5

Что происходит, так это то, что ваш сертификат недействителен (с точки зрения вашего приложения). Если вы хотите взять на себя риск, вы можете добавить следующий код.

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

- (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge { 
NSArray * trustedHosts = @[@"your domain"]; 
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]; 
} 

Таким образом, сертификат будет игнорироваться. (не забудьте заменить «ваш домен» вашим доменом.)

+0

как он будет срабатывать? – Umitk