2013-08-16 38 views
6

Tôi đang cố hiển thị hình ảnh được lưu trữ trên Thùng S3 của Amazon. URL giống như https://s3.amazon.com/..../test.jpg. Bất cứ khi nào tôi làm điều này trên giả lập iPhone, hình ảnh được hiển thị đúng cách. Tuy nhiên, nếu tôi thử nghiệm nó trên thiết bị thực tế bản thân, tôi tiếp tục nhận được:Nhận "Chứng chỉ cho máy chủ này không hợp lệ". trên iPad khi tải hình ảnh từ Amazon S3 (HTTPS), nhưng không có lỗi trên trình mô phỏng

Lỗi miền = NSURLErrorDomain Mã = -1202 "Giấy chứng nhận cho máy chủ này là không hợp lệ Bạn có thể kết nối với một máy chủ đó là . giả vờ là "s3.amazonaws.com" có thể đặt thông tin bí mật của bạn có nguy cơ ". UserInfo = 0x20007030 {NSErrorFailingURLStringKey = https://s3.amazonaws.com/.../test.jpeg, NSLocalizedRecoverySuggestion = Bạn có muốn kết nối đến máy chủ nào ?, NSErrorFailingURLKey = https://s3.amazonaws.com/.../test.jpeg, NSLocalizedDescription = 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à “s3.amazonaws.com” có thể đặt thông tin bí mật của bạn tại rủi ro., NSUnderlyingError = 0x20014d40 "Chứng chỉ cho máy chủ này không hợp lệ. Bạn có thể đang kết nối với một máy chủ đang giả vờ là “s3.amazonaws.com” mà có thể đưa thông tin bí mật của bạn tại rủi ro. ", NSURLErrorFailingURLPeerTrustErrorKey =}

Bất kỳ ý tưởng ?!

Cảm ơn!

+0

Điều gì xảy ra nếu bạn thử tải URL thử nghiệm của mình trong trình duyệt web? –

+0

Mọi thứ đều hoạt động tốt! – abisson

Trả lời

12

tôi đã nhận được báo lỗi tương tự chứng chỉ từ S3, và tìm thấy thêm này đến NSURLConnectionDelegate cố định vấn đề:

-(void)connection:(NSURLConnection *)connection willSendRequestForAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge 
{ 
    if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust] && 
     [challenge.protectionSpace.host hasSuffix:@"example.com"]) 
    { 
     // accept the certificate anyway 
     [challenge.sender useCredential:[NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust] forAuthenticationChallenge:challenge]; 
    } 
    else 
    { 
     [challenge.sender continueWithoutCredentialForAuthenticationChallenge:challenge]; 
    } 
} 

Chú ý: Bạn sẽ cần phải thay đổi 'example.com' vào một miền mà bạn tin tưởng hoặc sử dụng một cơ chế phức tạp hơn 'hasSuffix'.

FYI của Apple Technote TN2232 "HTTPS Tín đánh giá Server" đi vào nhiều chi tiết về việc tại sao các giấy chứng nhận đã bị từ chối và làm thế nào để xử lý nó: https://developer.apple.com/library/ios/technotes/tn2232/_index.html

Nhờ Gordon Henriksen cho trả lời này tại https://stackoverflow.com/a/2033823/235229, nhưng sử dụng api cũ hơn.

+0

câu trả lời hoàn hảo, bạn đã lưu ngày của tôi. – Logic

0

bạn cũng có thể kiểm tra ngày của thiết bị (nếu nhầm lẫn/cố ý ai đó đã thay đổi ngày này trong tương lai), trong trường hợp bạn có chứng chỉ tin cậy và vẫn đang đưa ra lỗi này.