2011-10-17 17 views
9

पर काम करना बंद करें मुझे एक ऐप मिला जो ASIHTTPRequest का उपयोग करता है।आईओएस 5: https (ASIHTTPRequest)

मैं iOS 5 साथ मेरे ऐप कंपाइल (SDK: 5.0/xcode: 4.2 4D199 बिल्ड) और https कनेक्शन असफल त्रुटि संदेश (https विकलांग ठीक काम करता है के साथ एक ही कॉल) के साथ:

Error Domain=ASIHTTPRequestErrorDomain Code=1 "A connection failure occurred" UserInfo=0xa8e66e0 {NSUnderlyingError=0xa8ac6c0 "The operation couldn’t be completed. (OSStatus error -9844.)", NSLocalizedDescription=A connection failure occurred} 

डीबग लॉग सक्षम होने के साथ: https://devforums.apple.com/message/537440#537440 जो expl सकता है:

[STATUS] Starting asynchronous request <ASIFormDataRequest: 0xd96fc00> 

[CONNECTION] Request <ASIFormDataRequest: 0xd96fc00> will not use a persistent connection 

[STATUS] Request <ASIFormDataRequest: 0xd96fc00>: Failed 

[CONNECTION] Request #(null) failed and will invalidate connection #(null) 

मैं इस संबंधित पोस्ट पाया मेरी समस्या है।

विचार है कि आईओएस 5 TLS 1.2 पसंद करते हैं पर आधारित है, मैं AIHTTPRequest.m में स्थापित करने kCFStreamSocketSecurityLevelTLSv1 बदलते कोशिश

NSDictionary *sslProperties = [[NSDictionary alloc] initWithObjectsAndKeys: 
            [NSNumber numberWithBool:YES], 
kCFStreamSSLAllowsExpiredCertificates, 
            [NSNumber numberWithBool:YES], kCFStreamSSLAllowsAnyRoot, 
            [NSNumber numberWithBool:NO], kCFStreamSSLValidatesCertificateChain, 
            kCFNull,kCFStreamSSLPeerName, 
             kCFStreamSocketSecurityLevelTLSv1, kCFStreamSSLLevel,// my modif 
            nil]; 
कोई सफलता के साथ

। शायद मेरा संशोधन गलत है?

विवरण:

  • मैं एआरसी अक्षम
  • मैं उपयोग libz.1.2.5.dylib
  • मैं ASIHTTPRequest एक सप्ताह पहले अपडेट किया गया।

मुझे नहीं पता कि यह समस्या एक प्रमाणपत्र कहानी है (जैसे टीएलएस संस्करण) या कुछ और।

कोई मदद/विचार स्वागत है!

उत्तर

6

यहाँ अंतिम समाधान है किया जाना चाहिए:

https://developer.apple.com/library/ios/#technotes/tn2287/_index.html#//apple_ref/doc/uid/DTS40011309

 NSDictionary *sslProperties = [[NSDictionary alloc] initWithObjectsAndKeys: 
             [NSNumber numberWithBool:YES], kCFStreamSSLAllowsExpiredCertificates, 
             [NSNumber numberWithBool:YES], kCFStreamSSLAllowsAnyRoot, 
             [NSNumber numberWithBool:NO], kCFStreamSSLValidatesCertificateChain, 
             kCFNull,kCFStreamSSLPeerName, 
             @"kCFStreamSocketSecurityLevelTLSv1_0SSLv3", kCFStreamSSLLevel, 
             nil]; 

इस परम जोड़ना:

         @"kCFStreamSocketSecurityLevelTLSv1_0SSLv3", kCFStreamSSLLevel, 
+1

यह पैच भी देखें: https://github.com/ignaval/asi-http-request/commit/c782abbeb204156d30ecbb902915d1eaf9b10f9e#comments - आप संपत्ति को प्रमाणित करना चाहते हैं प्रमाण पत्र = हाँ केस के साथ-साथ – ckhan

+0

मेरे लिए, @ ckhan का परिवर्तन था यह 5.0 – leontx

+0

बल पर काम करने से पहले भी आवश्यक है 'kCFStreamSocketSecurityLevelTLSv1_2' इस विधि के साथ भी काम करता है – ReDetection

1

ये बातें मैं कोशिश करेगा हैं:

  1. asihttprequest की ताज़ा प्रति डाउनलोड करें, यह है कि बस एक http बनाता है एक नव निर्मित बहुत ही सरल अनुप्रयोग में डाल दिया और देखो अगर यह बर्ताव करता है एक ही
  2. कोशिश अन्य https सर्वरों के विरुद्ध देखें कि क्या आपको वही व्यवहार मिलता है (कुछ बड़े नाम वाले लोगों के साथ प्रयास करें, उदाहरण के लिए https://twitter.com - लिंक्डइन, google, आदि, सभी में https संस्करण भी हैं)
  3. सफारी में एक ही सर्वर आज़माएं (अभी भी आईओएस पर डिवाइस)

इसके लायक होने के लिए, मेरे पास आईओएस 5 पर मेरे ग्राहक के https सर्वर के साथ ठीक काम करने के लिए ASIHTTPRequest है - मुझे आईओएस 5 के लिए कोई बदलाव नहीं करना पड़ा।

+0

युक्तियों के लिए धन्यवाद। # 1: कोई बदलाव नहीं; # 2: अन्य वेब पेज ठीक काम करता है। ; # 3: मूल ब्राउज़र के साथ, पेज अपेक्षित के रूप में प्रदर्शित होता है। ; क्या आप अपने ऐप से कॉल करते समय अपने ग्राहक के सर्वर उपयोग के टीएलएस के संस्करण के साथ मुझे बताने के लिए बहुत दयालु हो सकते हैं? – Loda

+0

मैं ईमानदारी से यकीन नहीं कर रहा हूँ; क्या आप जानते हैं कि मैं कैसे जांच करूंगा? सबूतों से अब तक मुझे लगता है कि यह वही टीएलएसवी 1.2 समस्या है जिसे आपने ऐप्पल फ़ोरम पर पोस्ट किया था - शायद आपको अपना कोड वहां पोस्ट करना चाहिए और उम्मीद है कि क्विन एक नज़र डालेंगे? – JosephH

+0

जैसा कि मुझे डर था, और जैसा कि आपने सुझाव दिया था, यह एक सर्वर से संबंधित समस्या हो सकती है। इसलिए, मुझे यकीन नहीं है कि मैं इसे एक मंच (एनडीए) में कैसे पूछ सकता हूं। कोई भी कैसे, यदि टीएलएस संस्करण समस्या है, तो मेरा संशोधन इसे क्यों ठीक नहीं करता है? ... वैसे भी मदद के लिए धन्यवाद, मुझे यह जानकर खुशी हो रही है कि यह ASIHTTPRequest/iOS5 के साथ एक सामान्य समस्या नहीं है। समाधान के लिए – Loda

1

टीएलएसवी 1 के बजाय केसीएफस्ट्रीम सॉकेट सुरक्षा सुरक्षावेलवेएल 3 का उपयोग करने का प्रयास करें। जब मैं एक समान स्थिति में भाग गया तो यह मेरे लिए काम करता था।मुझे यकीन नहीं है कि ऑटो-वार्तालाप सही प्रोटोकॉल पर क्यों नहीं आ रहा है, लेकिन कम से कम कुछ सर्वरों पर यह ASIHttpRequest के अंतर्गत असफल प्रतीत होता है जहां यह NSURLConnection के साथ काम करेगा।

6

हमारे सेटअप पर समस्या बस ऊपर

CFReadStreamSetProperty((CFReadStreamRef)[self readStream], kCFStreamPropertySSLSettings, sslProperties); 
हैंडल SSL प्रमाणपत्र सेटिंग्स अनुभाग में

[sslProperties setObject:(NSString *)kCFStreamSocketSecurityLevelSSLv3 forKey:(NSString *)kCFStreamSSLLevel]; 

डालने से तय हुई थी।

संपादित करें: http://developer.apple.com/library/ios/#technotes/tn2287/_index.html#//apple_ref/doc/uid/DTS40011309 के अनुसार निम्नलिखित अधिक मजबूत

[sslProperties setObject:@"kCFStreamSocketSecurityLevelTLSv1_0SSLv3" forKey:(NSString *)kCFStreamSSLLevel]; 
+0

धन्यवाद। यह मेरे आईफोन ऐप के लिए काम कर रहा है, लेकिन जब मैं अपने आईपैड ASIHTTPRequest में एक ही लाइन डाल रहा हूं तो यह काम नहीं कर रहा है। संभावित समाधान क्या हो सकता है? धन्यवाद। :) – Akshay

+0

चूंकि मैंने इस सवाल का जवाब दिया है क्योंकि एएसआई ने ASIHTTPRequest को बनाए रखना बंद कर दिया है और मैंने AFNetworking https://github.com/AFNetworking/AFNetworking का उपयोग करना शुरू कर दिया है। – weibel