6

Tôi cố gắng để tiêu thụ đảm bảo dịch vụ yên tĩnh mang đến cho lỗiiphone: máy chủ restfull an toàn "Giấy chứng nhận cho máy chủ này là không hợp lệ

Lỗi = Lỗi miền = NSURLErrorDomain Mã = -1202" Giấy chứng nhận cho máy chủ này không hợp lệ . Bạn có thể đang kết nối với máy chủ giả vờ là “xxx.xxx.xxx.xxx” có thể khiến thông tin bí mật của bạn gặp rủi ro. ”

làm việc trên xCode 4.2, lỗi hoặc bất kỳ bước nào bị thiếu.

sử dụng đoạn mã sau

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

Tôi sẽ giải quyết vấn đề này bằng cách đặt ngày và giờ thích hợp cho thiết bị của tôi. – Hemang

+0

Giải quyết cùng một vấn đề với chỉ thiết lập ngày và giờ của thiết bị thành tự động. –

Trả lời

13

Tôi cảm thấy điều này có thể là do DNS. Một cái gì đó giống như máy chủ của bạn không được đăng ký hoặc một số.

hãy thử sử dụng này cho purpose- sự phát triển của

EDIT:

Tạo một "NSURLRequest + NSURLRequestSSLY.h" tập tin và thêm những dòng này để nó

#import <Foundation/Foundation.h> 

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

@end 

Tạo một "NSURLRequest + NSURLRequestSSLY .m "tệp và thêm những dòng này vào nó

#import "NSURLRequest+NSURLRequestSSLY.h" 

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

@end 

Và đừng cho có thể xóa nó vì ứng dụng của bạn có thể bị từ chối.

+0

cho #import "NSURLRequest + NSURLRequestSSLY.h" lỗi không tìm thấy tệp? – Azhar

+0

đã chỉnh sửa câu trả lời ngay bây giờ. –

+1

Làm việc tốt cho tôi. – aroth

8

Lỗi không nằm trong mã của bạn. Bạn đang sử dụng máy chủ HTTPS không cung cấp chứng chỉ đã biết. Nếu bạn đã tự thiết lập máy chủ, bạn phải mua và mua chứng chỉ được chọn từ một trong những cơ quan cấp chứng chỉ lớn được tin cậy bởi iOS và hầu hết các hệ điều hành khác.

Vì mục đích phát triển, bạn có thể kiểm tra dịch vụ REST của mình bằng cách bỏ qua chứng chỉ không đáng tin cậy. Làm theo hướng dẫn này để thực hiện điều đó: http://www.cocoanetics.com/2009/11/ignoring-certificate-errors-on-nsurlrequest/

Nhưng để sử dụng sản xuất, tôi khuyên bạn không nên sử dụng phương pháp này vì nó sẽ mang lại rò rỉ bảo mật cho ứng dụng của bạn. Nếu bạn bỏ qua bảo mật, bạn cũng có thể chỉ sử dụng HTTP thay vì HTTPS.

+0

Điều này là tốt hơn .. –

+0

Nhưng điều này là sử dụng API riêng và Áp dụng có thể từ chối ứng dụng do điều này, bạn có thể giúp với một số API công cộng, giống như tôi đã sử dụng nhưng có vấn đề để có được nó được giải quyết – Azhar

+0

ASIHttpRequest không có một BOOL đơn giản tài sản vô hiệu hóa xác nhận chứng nhận. Có lẽ bạn có một cái nhìn tại nguồn của dự án hoặc chỉ sử dụng ASIHttpRequest thay vì NSURLRequest. – miho

0

Tôi đã thử một số cách và phát hiện ra nó có liên quan đến chứng chỉ trung tâm nhà phát triển của Apple. Nâng cấp cấp phép của bạn và thử lại. Tôi đã thử đăng dữ liệu bằng iPad, iPhone 5 và 5S nhưng iPhone 4. Khi tôi cập nhật cấp phép và cài đặt trên iPhone 4, hãy làm việc với sự cố hiện tại.

Các vấn đề liên quan