2013-02-25 90 views
5

मैं Certificate and Public Key Pinning के लिए OWASP नमूना के साथ काम कर रहा हूं। नमूना random.org का उपयोग करता है, और random.org को हाल ही में एक नया प्रमाणपत्र मिला है। इसका मतलब है कि connection:didReceiveAuthenticationChallenge: असफल रहा है। यह उम्मीद है और अच्छा :)NSUrlConnection से अर्थपूर्ण त्रुटि प्रदान करें ReeceiveAuthenticationChallenge

हालांकि, विफलता -1012 के कोड के साथ "NSURLErrorDomain" के रूप में प्रदर्शित होती है। यही कारण है कि बहुत उपयोगी नहीं है, और यदि कोई उपयोगकर्ता इसके साथ कुछ भी सार्थक करने के लिए सक्षम नहीं होगा:

enter image description here

यह बहुत बेहतर होगा समान पाठ के साथ एक संदेश की आपूर्ति करने "चेतावनी के लिए: सार्वजनिक कुंजी वेबसाइट की पहचान बदल गया है..."।

एक और छोटी नाइट: connection:didFailWithError: में, मैं यह नहीं बता सकता कि -1012 पिनिंग विफलता या किसी अन्य नेटवर्क त्रुटि के कारण है या नहीं। तो मैं केवल प्रमाणपत्र विफलता के लिए संदेश की आपूर्ति करना चाहता हूं, न कि अन्य -1012 त्रुटियों।

[[challenge sender] cancelAuthenticationChallenge: challenge] (जिसे connection:didReceiveAuthenticationChallenge: विफल होने पर कॉल किया जाता है) के कॉल पर "समृद्ध त्रुटि जानकारी" की आपूर्ति कैसे करता है। NSURLConnectionDelegate Protocol Reference और NSURLAuthenticationChallengeSender Protocol Reference इस बात का जिक्र नहीं है कि ऐसा कैसे करें।

+0

बहुत अच्छा सवाल, कुछ समय पहले मुझे एक ही समस्या थी लेकिन वास्तव में -1012 से अधिक जानकारी प्राप्त करने में सक्षम नहीं था। मैं जेनेरिक संदेश के लिए उपयोगकर्ता को बता रहा हूं कि प्रमाणपत्र मेल नहीं खाता है। – lawicko

+0

हाय लॉरिको। मैं समृद्ध त्रुटि जानकारी के साथ अपवाद फेंकने की कोशिश करने के बारे में सोच रहा था। जैसा कि मैं इसे समझता हूं, उद्देश्य सी अपवाद अन्य भाषा अपवादों की तरह नहीं हैं। क्या आपने इस मामले में एक उद्देश्य सी अपवाद की कोशिश की है? – jww

+0

मेरी समझ के लिए, यहां समस्या यह है कि त्रुटि के बारे में अतिरिक्त जानकारी कैसे प्राप्त करें, इसके बाद इसे कैसे संसाधित नहीं किया जाए। इसलिए, आपको केवल शाप दिया गया -1012 बिना अंडरलेइंग कारण क्या है, इस पर आधारित है कि आप वास्तव में यह नहीं बता सकते कि यह प्रमाणपत्र विफलता या किसी अन्य समस्या के कारण था, या कम से कम मैं उस जानकारी को पुनर्प्राप्त करने में सक्षम नहीं था। मैं बिल्कुल समझ नहीं पा रहा हूं कि उस बिंदु पर अपवाद फेंकने से मूल मुद्दे में मदद मिलेगी? – lawicko

उत्तर

0

NSString * alertMessage = [challenge.error localizedFailureReason]; 

उपयोग करने के लिए मानव पठनीय त्रुटि जानकारी प्राप्त करने के लिए प्रयास करें।

NSError और NSURLAuthenticationChallenge के लिए दस्तावेज़ देखें।