2013-02-25 23 views
5

Tôi đang làm việc với mẫu OWASP cho Certificate and Public Key Pinning. Mẫu sử dụng random.orgrandom.org gần đây đã nhận được chứng chỉ mới. Điều đó có nghĩa là connection:didReceiveAuthenticationChallenge: không thành công. Điều đó được mong đợi và tốt :)Cung cấp lỗi có ý nghĩa từ NSUrlConnection didReceiveAuthenticationChallenge

Tuy nhiên, lỗi được hiển thị là "NSURLErrorDomain", với mã là -1012. Đó không phải là rất hữu ích, và người dùng sẽ không thể làm bất cứ điều gì có ý nghĩa với nó:

enter image description here

Sẽ tốt hơn nhiều để cung cấp một thông điệp với nội dung tương tự như "Cảnh báo: khóa công khai xác định các trang web đã thay đổi...".

Một chút nit khác: trong connection:didFailWithError:, tôi không thể biết liệu -1012 có phải do lỗi ghim hay lỗi mạng khác không. Vì vậy, tôi chỉ muốn cung cấp thông báo cho lỗi chứng chỉ và không phải lỗi khác -1012.

Làm thế nào để cung cấp "thông tin lỗi phong phú" cho cuộc gọi [[challenge sender] cancelAuthenticationChallenge: challenge] (được gọi là khi connection:didReceiveAuthenticationChallenge: không thành công). NSURLConnectionDelegate Protocol ReferenceNSURLAuthenticationChallengeSender Protocol Reference không đề cập đến cách thực hiện.

+0

Câu hỏi rất hay, một thời gian trước, tôi đã có chính xác cùng một vấn đề nhưng không thực sự có thể truy xuất thêm thông tin hơn -1012. Tôi đã giải quyết cho thông báo chung cho người dùng biết rằng chứng chỉ không khớp. – lawicko

+0

Hi lawicko. Tôi đã suy nghĩ về việc cố gắng ném một ngoại lệ với thông tin lỗi phong phú. Như tôi đã hiểu, ngoại lệ đối tượng C không giống như ngoại lệ ngôn ngữ khác. Bạn đã thử một ngoại lệ Objective C trong trường hợp này? – jww

+0

Để hiểu biết của tôi, vấn đề ở đây là làm thế nào để có được thông tin bổ sung về lỗi, không phải làm thế nào để xử lý nó sau đó. Vì vậy, bạn chỉ nhận được lời nguyền -1012 mà không thực sự biết nguyên nhân làm nền tảng là gì, dựa trên đó bạn không thể thực sự biết đó là do lỗi chứng chỉ hay một số vấn đề khác, hoặc ít nhất tôi không thể lấy thông tin đó. Tôi không chính xác hiểu làm thế nào ném một ngoại lệ tại thời điểm đó sẽ giúp đỡ với vấn đề ban đầu? – lawicko

Trả lời

0

Cố gắng sử dụng

NSString * alertMessage = [challenge.error localizedFailureReason]; 

để có được thông tin lỗi có thể đọc được của con người.

Xem tài liệu cho NSErrorNSURLAuthenticationChallenge.

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