जवाबों:
IOS9 के लिए, ऐप्पल ट्रांसपोर्ट सिक्योरिटी (ATS) के एक भाग के रूप में, Apple iOS ऐप से सभी असुरक्षित HTTP ट्रैफ़िक को अक्षम करते हुए Apple ने iOS 9 के साथ एक क्रांतिकारी निर्णय लिया ।
ATS को बस अक्षम करने के लिए, आप खुले Info.plist द्वारा इस चरण का अनुसरण कर सकते हैं , और निम्नलिखित पंक्तियाँ जोड़ सकते हैं:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
भले ही मनमाना लोड की अनुमति देना ( NSAllowsArbitraryLoads = true
) एक अच्छा समाधान है, आपको एटीएस को पूरी तरह से अक्षम नहीं करना चाहिए, बल्कि उस HTTP कनेक्शन को सक्षम करना चाहिए जिसे आप अनुमति देना चाहते हैं:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>yourserver.com</key>
<dict>
<!--Include to allow subdomains-->
<key>NSIncludesSubdomains</key>
<true/>
<!--Include to allow HTTP requests-->
<key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
<true/>
<!--Include to specify minimum TLS version-->
<key>NSTemporaryExceptionMinimumTLSVersion</key>
<string>TLSv1.1</string>
</dict>
</dict>
</dict>
iOS 9 फोर्स कनेक्शन जो हाल की कमजोरियों से बचने के लिए HTTPS का उपयोग TLS 1.2 कर रहा है। IOS 8 में भी अनएन्क्रिप्टेड HTTP कनेक्शन का समर्थन किया गया था, जिससे कि TLS के पुराने संस्करणों को कोई समस्या नहीं हुई। वर्कअराउंड के रूप में, आप इस कोड स्निपेट को अपनी Info.plist में जोड़ सकते हैं:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
* ऐप ट्रांसपोर्ट सिक्योरिटी (एटीएस) का संदर्भ
यदि आप केवल उन विशिष्ट डोमेन को लक्षित कर रहे हैं जिन्हें आप अपने आवेदन के Info.plist में आज़मा सकते हैं और जोड़ सकते हैं:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>example.com</key>
<dict>
<key>NSExceptionRequiresForwardSecrecy</key>
<false/>
<key>NSIncludesSubdomains</key>
<true/>
</dict>
</dict>
</dict>
ऐसा प्रतीत होता है कि iOS 9.0.2 मान्य HTTPS समापन बिंदुओं के अनुरोधों को तोड़ता है। मेरा वर्तमान संदेह यह है कि इसे SHA-256 सेर्ट्स की आवश्यकता है या यह इस त्रुटि के साथ विफल हो जाता है।
पुन: पेश करने के लिए, सफारी के साथ अपने UIWebView का निरीक्षण करें, और एक मनमाने ढंग से HTTPS समापन बिंदु पर नेविगेट करने का प्रयास करें:
location.href = "https://d37gvrvc0wt4s1.cloudfront.net/js/v1.4/rollbar.min.js"
// [Error] Failed to load resource: An SSL error has occurred and a secure connection to the server cannot be made. (rollbar.min.js, line 0)
अब Google पर जाने का प्रयास करें (निश्चित रूप से उनके पास SHA-256 प्रमाणपत्र है):
location.href = "https://google.com"
// no problemo
परिवहन सुरक्षा के लिए एक अपवाद जोड़ना (जैसा @ @ स्टीफन-ब्रुकर्ट के उत्तर के ऊपर उल्लिखित है) इसे ठीक करने के लिए काम करता है। मैं यह भी मानता हूं कि पूरी तरह से अक्षम NSAppTransportSecurity
करना भी काम करेगा, हालांकि मैंने पढ़ा है कि पूरी तरह से अक्षम करने से यह आपके ऐप की समीक्षा को खतरे में डाल सकता है।
[संपादित करें] मैंने पाया है कि मैं जिन डोमेन से जुड़ रहा हूँ, उन्हें NSExceptionDomains
डिमांड में जोड़ते हुए, इस समस्या को ठीक करता है, यहाँ तक कि जब NSExceptionAllowsInsecureHTTPLoads
सेट पर जाना सही होता है। : \
समस्या सर्वर साइड पर ssl प्रमाणपत्र है। या तो कुछ हस्तक्षेप कर रहा है या प्रमाणपत्र सेवा से मेल नहीं खाता है। उदाहरण के लिए जब किसी साइट पर www.mydomain.com के लिए ssl सर्टिफिकेट होता है जबकि आप जिस सेवा का उपयोग करते हैं वह myservice.mydanain.com पर चलती है। वह एक अलग मशीन है।
जब मैं अपना HTTPS URL निर्दिष्ट करता हूं तो मुझे वही त्रुटि मिलती है: https://www.mywebsite.com । हालांकि यह ठीक काम करता है जब मैं इसे तीन डब्ल्यू के बिना निर्दिष्ट करता हूं: https://mywebsite.com ।
Xcode प्रोजेक्ट -> गोटो info.plist और + बटन पर क्लिक करें फिर जोड़ें (ऐप ट्रांसपोर्ट सिक्योरिटी सेटिंग्स) का विस्तार करें, आर्बिटर्ड लोड सेट YES की अनुमति दें। धन्यवाद
मेरा मुद्दा था NSURLConnection
और वह iOS9 में पदावनत हो गया था इसलिए मैंने सभी एपीआई को बदल दिया NSURLSession
और इससे मेरी समस्या ठीक हो गई।
मेरे मामले में मुझे अपने सिम्युलेटर में इस मुद्दे का सामना करना पड़ा क्योंकि मेरे कंप्यूटर की तारीख वर्तमान तारीख से पीछे थी। इसलिए एसएसएल त्रुटि का सामना करने पर भी इस मामले की जांच करें।
मुझे प्लेबैक पर त्रुटि हो रही थी
finished with error [-1200] Error Domain=NSURLErrorDomain Code=-1200 "An SSL error has occurred and a secure connection to the server cannot be made." UserInfo={NSErrorFailingURLStringKey=https://remote-abcabc-svc.an.abc.com:1935/abr/_definst_/smil:v2/video/492F2F82592F59EA74ABAA6B9D6E6F42/F6B1BD452132329FBACD32730862CAE0/091EAD80FE9BEDD52A2F33840CA3CBAC.v3.eng.smil/playlist.m3u8, NSLocalizedRecoverySuggestion=Would you like to connect to the server anyway?, _kCFStreamErrorDomainKey=3, _NSURLErrorFailingURLSessionTaskErrorKey=LocalDataTask <692A1174-DA1C-4267-9560-9020A79F8458>.<1>, _NSURLErrorRelatedURLSessionTaskErrorKey=(
"LocalDataTask <692A1174-DA1C-4267-9560-9020A79F8458>
मैंने यह सुनिश्चित किया कि मैंने plist फ़ाइल में अपवाद डोमेन में प्रविष्टि जोड़ी और NSAllowsArbiteathLoads सही पर सेट है और फिर भी मुझे एक त्रुटि दिखाई दे रही थी।
तब मुझे महसूस हुआ कि मैं https के साथ URL खेल रहा हूं और http नहीं।
मैं http और समस्या हल करने के लिए वीडियो यूआरएल सेट।