2012-01-13 14 views
25

में असत्यापित SSL प्रमाणपत्र मैं एक UIWebView में एक वेबसाइट को एम्बेड कर रहा हूँ। विकास के दौरान मैंने स्थानीयहोस्ट पर ध्यान दिया है। समस्या यह है कि जब भी यह एक हिट है "https: //" यूआरएल यह लोड नहीं करता है। जब मैं मोबाइल सफारी में यूआरएल लोड मैं इस पॉपअप मिल:अनुमति दें UIWebView

enter image description here

वहाँ UIWebView के साथ इस ओवरराइड करने के लिए असत्यापित यूआरएल अनुमति देने के लिए कोई तरीका है?

#if DEBUG 

@implementation NSURLRequest (NSURLRequestWithIgnoreSSL) 

+ (BOOL)allowsAnyHTTPSCertificateForHost:(NSString *)host 
{ 
    return YES; 
} 

@end 

#endif 

बस अपने मीटर फ़ाइलों में से एक (जैसे एप्लिकेशन प्रतिनिधि) में यह कहीं भी रख, या:

उत्तर

8

निक का उत्तर ऐप स्टोर में ऐप्पल द्वारा स्वीकार किए जाने से आपके ऐप को बनाए रखेगा और जॉर्ज का उत्तर उस पृष्ठ के शेष हिस्से को लोड करने में विफल रहेगा जिसमें .css या .js या कोई अन्य माध्यमिक डाउनलोड है। वहाँ एक पूरा जवाब here कि UIWebView किसी अविश्वसनीय प्रमाण पत्र के साथ एक साइट से पृष्ठों को लोड करने की अनुमति देता है।

+4

+1, मुझे अभी "ऐप एचटीटीपीएस कंटेंटफॉरहोस्ट विधि" की अनुमति देने के कारण मेरा ऐप खारिज कर दिया गया है – Yanchi

+1

मैंने अपने जवाब में दो बार उल्लेख किया कि इस समाधान का उपयोग केवल उद्देश्यों के परीक्षण के लिए किया जाना था। एक अविश्वसनीय प्रमाणपत्र के साथ एक HTTPS सर्वर पर अपने लाइव ऐप को इंगित करना शून्य सुरक्षा प्रदान करता है, इसलिए आप इसके बजाय HTTP का उपयोग भी कर सकते हैं। –

56

यदि यह विकास के दौरान बस के परीक्षण के लिए है आप NSURLRequest पर एक वर्ग निम्नलिखित निजी विधि बना सकते हैं और ओवरराइड कर सकते हैं इसे अपनी खुद की .m फ़ाइल में डाल दें। आपको मिलान करने वाली हेडर फ़ाइल की आवश्यकता नहीं है।

#if DEBUG जब आप ऐप्पल को सबमिट करते हैं तो इसे गलती से सक्षम करने से रोकने के लिए एक सावधानी बरतनी है, लेकिन यदि आपको रिलीज बिल्ड में काम करने की आवश्यकता है तो उसे हटा दें (और सुनिश्चित करें कि आपको इसे पुनर्स्थापित करना या इस श्रेणी को निकालना याद रखना है ऐप्पल को सबमिट करने से पहले)।

+0

मैं के खिलाफ जांच करने के लिए वहाँ पर भरोसा होस्ट की सूची में जोड़ सकते हैं? –

+0

आप जो फ़ंक्शन चाहते हैं उसमें आप जो भी तर्क डाल सकते हैं। आप विश्वसनीय होस्ट की सरणी के विरुद्ध होस्ट पैरामीटर की तुलना कर सकते हैं और यदि यह मेल खाता है तो केवल YES को वापस कर सकता है। लेकिन मुझे वास्तव में बिंदु नहीं दिख रहा है अगर यह केवल परीक्षण उद्देश्यों के लिए है - याद रखें कि आप इस कोड के साथ एक ऐप नहीं भेज सकते हैं (जब तक कि आप इसे जोखिम नहीं लेना चाहते हैं और उम्मीद है कि ऐप्पल नोटिस नहीं करेगा)। –

+2

यह समाधान मेरे लिए काम नहीं करता है। जब मैं इसे अपने कोड में लिखता हूं, तो ऐप वास्तव में सुरक्षा प्रमाणपत्रों से जुड़ी त्रुटि को फेंकने की उपेक्षा करता है, लेकिन यह पृष्ठ को लोड करना समाप्त नहीं करता है। मुझे यकीन नहीं है कि यह क्या कर रहा है। मैं हर संबंधित विधि मैं मिल सकता है (didFailLoadWithError, didFinishLoading, आदि) में NSLogs की स्थापना की है और यह कभी उनमें से किसी को नहीं पहुंचता। क्या यह मेरी वेबसाइट के साथ शायद एक समस्या है? – Andrew

2

(कम से कम App स्टोर कानूनों द्वारा) को कानूनी रूप से ऐसा करने के लिए एक रास्ता नहीं है।

How to use NSURLConnection to connect with SSL for an untrusted cert?

आप लागू करते हैं तो UIWebViewDelegate इस के लिए उपयोग

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType; 

वापसी सं: आप NSURLConnection का उपयोग करते हैं वहाँ 2 तरीकों कि प्रयोग की जाने वाली स्व-हस्ताक्षरित SSL प्रमाणपत्र अनुमति देने के लिए किया जा सकता है ताकि WebView अपने दम पर लोड नहीं करता है। फिर एक NSURLConnection (जिसे उपरोक्त लिंक के माध्यम से बिना हस्ताक्षरित प्रमाणपत्रों के साथ उपयोग किया जा सकता है) का निर्माण करें।

बेशक सामान्य एसएसएल सिफारिशें यहां लागू होती हैं:
- उत्पादन सर्वर पर एक हस्ताक्षरित प्रमाण का उपयोग न करें!
-हमेशा एक चेतावनी दे अपने उपयोगकर्ता प्रमाणपत्र नहीं स्वीकार या तय सतह।

3

नीचे दो विधियों का उपयोग हम UIWebView में असत्यापित ssl अनुमति दे सकते हैं

-(BOOL)connection:(NSURLConnection *)connection canAuthenticateAgainstProtectionSpace:(NSURLProtectionSpace *)protectionSpace; 

-(void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge; 

मैं विस्तार से जवाब दे दिया है कि कैसे आईओएस 9 में इस here

7

प्राप्त करने के लिए, SSL कनेक्शन सभी अमान्य या स्वयं के लिए असफल हो जायेगी हस्ताक्षर प्रमाण पत्र। यह आईओएस 9.0 या बाद में, और ओएस एक्स 10.11 और बाद में नई App Transport Security सुविधा का डिफ़ॉल्ट व्यवहार है।

आप NSAppTransportSecurity शब्दकोश में YES करने के लिए NSAllowsArbitraryLoads की स्थापना करके Info.plist में इस व्यवहार को ओवरराइड कर सकते हैं,। हालांकि, मैं केवल परीक्षण उद्देश्यों के लिए इस सेटिंग को ओवरराइड करने की अनुशंसा करता हूं।

enter image description here

जानकारी के लिए अनुप्रयोग परिवहन Technote here देखते हैं।

+0

यदि आपके पास एक स्व-हस्ताक्षरित प्रमाणपत्र है, तो मैं मोबाइल सफारी में यूआरएल खोलने और प्रमाणन को पहले स्वीकार करने की सलाह देता हूं। यह विश्वास स्थापित करना चाहिए। – johnnieb

0

मुझे यह थोड़ा देर हो गया है लेकिन यह दूसरों की मदद कर सकता है, मुझे आईओएस ऐप में एसएसएल बाईपास करने के लिए एक लेख मिला है, आपको बस अपना वेबव्यू सेटअप करना है और आवेदन से अपने सर्वर पर पोस्ट अनुरोध करना है और यदि आपको मिलता है SSL त्रुटि मतलब है कि आप न अपने सर्वर पर कोई मान्य प्रमाणपत्र है के लिए, आप वेबव्यू प्रतिनिधियों methonds जो 1. कर रहे हैं) का उपयोग करने के प्रमाणित कर सकते हैं के खिलाफ सुरक्षा में अंतरिक्ष 2.) है अनुरोध 3. के साथ लोड आरंभ करना चाहिए बायपास करने के लिए) था प्रमाणीकरण चुनौती आप इस URL से इन समारोह कॉपी कर सकते हैं, मेरे लिए यह बहुत अच्छी तरह से काम करता है प्राप्त करें। आशा है कि यह मदद करता है निक लॉकवुड जवाब के लिए

10

स्विफ्ट 3/4 संस्करण।

यह सिर्फ परीक्षण/विकास उद्देश्यों के लिए है:

extension NSURLRequest { 
    #if DEBUG 
    static func allowsAnyHTTPSCertificate(forHost host: String) -> Bool { 
     return true 
    } 
    #endif 
} 
संबंधित मुद्दे