iOS9 त्रुटि "एक SSL त्रुटि हुई है और सर्वर से एक सुरक्षित कनेक्शन नहीं बनाया जा सकता है"


109

जब से मैंने iOS 9 के साथ अपने मौजूदा प्रोजेक्ट को अपग्रेड किया है, मुझे त्रुटि मिलती रहती है:

SSL त्रुटि हुई है और सर्वर से सुरक्षित संबंध नहीं बनाया जा सकता है।


3
यह मेरे मामले में प्रॉक्सी त्रुटि थी, यहां उत्तर ढूंढें। stackoverflow.com/a/34787953/3840428
नागार्जुन

जवाबों:


123

IOS9 के लिए, ऐप्पल ट्रांसपोर्ट सिक्योरिटी (ATS) के एक भाग के रूप में, Apple iOS ऐप से सभी असुरक्षित HTTP ट्रैफ़िक को अक्षम करते हुए Apple ने iOS 9 के साथ एक क्रांतिकारी निर्णय लिया ।

ATS को बस अक्षम करने के लिए, आप खुले Info.plist द्वारा इस चरण का अनुसरण कर सकते हैं , और निम्नलिखित पंक्तियाँ जोड़ सकते हैं:

<key>NSAppTransportSecurity</key>
  <dict>
      <key>NSAllowsArbitraryLoads</key>
      <true/>
  </dict>

46
मैंने प्लिस्ट में लाइनों के ऊपर जोड़ा, लेकिन अभी भी निम्नलिखित त्रुटि हो रही है: एक एसएसएल त्रुटि हुई है और सर्वर से एक सुरक्षित कनेक्शन नहीं बनाया जा सकता है। NSLocalizedRecoverySuggestion = क्या आप वैसे भी सर्वर से कनेक्ट करना चाहेंगे ?, _kCFNetworkCFStreamSSLErrorOriginalValue = -9819 मैं HTTPS अनुरोध कॉल कर रहा हूं। क्या HTTPS के लिए कोई अन्य विकल्प है?
एआईओएसएन

1
AiOsN = यहाँ भी यही समस्या है, क्या आपको कोई हल मिला?
फ्रेंक

5
यह एक आम गलत व्याख्या है, कि NSAllowsArbiteathLoads ATS को सक्षम या अक्षम करने के लिए एक स्विच है। जैसे ही आप एक https: // अनुरोध कर रहे हैं, आपको यह सुनिश्चित करना होगा कि आप एटीएस-आवश्यकताओं को पूरा करते हैं: सर्वर पर स्थापित एक वैध प्रमाणपत्र (वाइल्डकार्ड के बिना, सर्वर के डोमेन नाम से बिल्कुल मेल खाते हुए), सर्वर टीएलएस 1.2 का समर्थन करता है। गोपनीयता।
ईसाई

@ क्रिसटन इन एटीएस आवश्यकताओं का स्रोत क्या है? मुझे वाइल्डकार्ड प्रमाणपत्रों का समर्थन नहीं करने के बारे में कुछ भी नहीं मिल रहा है।
बार्ट

@Bartosz क्षमा करें, मैं आपको एक आधिकारिक दस्तावेज़ को इंगित नहीं कर सकता, यह सिर्फ कुछ है जो हमने अपने सर्वर के बुनियादी ढांचे को अपडेट करते समय देखा है।
क्रिश्चियन

64

भले ही मनमाना लोड की अनुमति देना ( 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>

2
सभी सुरक्षा समस्याओं की अनदेखी करने से बेहतर है। अमेज़ॅन की S3 सेवा कमजोर एन्क्रिप्शन का उपयोग करती है, और उनके सर्वर पर सीधे लोड करने से समस्याएं पैदा हो रही थीं, लेकिन इससे हमें केवल s3.amazonaws.com url खोलने की अनुमति मिली, बाकी की इनलाइन को बनाए रखा। बहुत बढ़िया!
मिश्रण

3
मैं जिस सर्वर तक पहुंचने की कोशिश कर रहा था वह TLSv1.0 का उपयोग कर रहा था। मुझे एसएलएल त्रुटि को दरकिनार करने के लिए tls1.0 के लिए NSExceptionMinimumTLSVersion को जोड़ना पड़ा
Ispas Claudiu

इस जवाब ने मेरे लिए काम किया। मैं WKWebView का उपयोग कर रहा था और API सर्वर से SSL अनुरोध करने की कोशिश कर रहा था।
फैन जिन

हाय @ स्टीफन, मुझे अजीब स्थिति मिली। मेरे फोन में iOS संस्करण 12.1.2 है, लेकिन मुझे त्रुटि मिली "एक एसएसएल त्रुटि हुई है और सर्वर से एक सुरक्षित कनेक्शन नहीं बनाया जा सकता है"। मैंने जो भी किया वह मेरी फ़ाइल को अद्यतन करने के लिए है। ऐप ठीक चलता है और फिर से मैंने जानकारी में किए गए बदलावों को हटा दिया है। अब यह ठीक चल रहा है। इसलिए, मैं इस त्रुटि का वास्तविक कारण नहीं खोज पा रहा हूं। कोई उपाय?
मानसु ....

@Mansuu .... क्या आपने उपरोक्त टिप्पणियों में सुझाए अनुसार TLSv1.0 का उपयोग करने की कोशिश की?
स्टीफन ब्रुकर्ट

15

iOS 9 फोर्स कनेक्शन जो हाल की कमजोरियों से बचने के लिए HTTPS का उपयोग TLS 1.2 कर रहा है। IOS 8 में भी अनएन्क्रिप्टेड HTTP कनेक्शन का समर्थन किया गया था, जिससे कि TLS के पुराने संस्करणों को कोई समस्या नहीं हुई। वर्कअराउंड के रूप में, आप इस कोड स्निपेट को अपनी Info.plist में जोड़ सकते हैं:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

* ऐप ट्रांसपोर्ट सिक्योरिटी (एटीएस) का संदर्भ

यहां छवि विवरण दर्ज करें


1
स्विफ्ट 4+ के लिए, ऐप ट्रांसपोर्ट सिक्योरिटी सेटिंग्स ->
आर्बिटर्ड

14

यदि आप केवल उन विशिष्ट डोमेन को लक्षित कर रहे हैं जिन्हें आप अपने आवेदन के 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>

इसने मेरे लिए काम नहीं किया। हां, मैंने "example.com" के लिए सही डोमेन रखा।
एल्योसक

1
यह मेरे लिए काम है। जब मैंने केवल "अनुमति दें मनमाने ढंग से लोड" कार्यों के साथ छूट दी, लेकिन रुकने के बाद। जब मैंने कुंजी "NSExceptionRequiresForwardSecrecy" का उपयोग किया -> असत्य और "NSIncludesSubdomains" -> सच यह पूरी तरह से काम करता है। आपका बहुत बहुत धन्यवाद!
लिन्हादिरेतलिपेट

1
यह मेरे लिए भी काम किया! भले ही मैं https कनेक्शन का उपयोग कर रहा हूं, फिर भी मुझे समस्या का सामना करना पड़ा। वर्तमान में 'NSExceptionRequiresForwardSecrecy' का कोई समर्थन नहीं है। मैंने जो पढ़ा, उससे यह पहले निर्दिष्ट करने के लिए आवश्यक नहीं था, लेकिन ऐसा लगता है कि उन्होंने इसे अब अनिवार्य बना दिया है। PS: मैं iOS 10.2.1 के साथ कोशिश कर रहा था
वैभव मिश्रा

6

ऐसा प्रतीत होता है कि 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सेट पर जाना सही होता है। : \


2

समस्या सर्वर साइड पर ssl प्रमाणपत्र है। या तो कुछ हस्तक्षेप कर रहा है या प्रमाणपत्र सेवा से मेल नहीं खाता है। उदाहरण के लिए जब किसी साइट पर www.mydomain.com के लिए ssl सर्टिफिकेट होता है जबकि आप जिस सेवा का उपयोग करते हैं वह myservice.mydanain.com पर चलती है। वह एक अलग मशीन है।


मैं कुछ यूआरएल के साथ समस्या का सामना कर रहा हूं, लेकिन एक ही आईपी पते (डोमेन और सर्वर) पर अन्य नहीं
user6631314

2

जब मैं अपना HTTPS URL निर्दिष्ट करता हूं तो मुझे वही त्रुटि मिलती है: https://www.mywebsite.com । हालांकि यह ठीक काम करता है जब मैं इसे तीन डब्ल्यू के बिना निर्दिष्ट करता हूं: https://mywebsite.com


0

Xcode प्रोजेक्ट -> गोटो info.plist और + बटन पर क्लिक करें फिर जोड़ें (ऐप ट्रांसपोर्ट सिक्योरिटी सेटिंग्स) का विस्तार करें, आर्बिटर्ड लोड सेट YES की अनुमति दें। धन्यवाद


@AbdulYasin अपने प्लास्ट की जांच करें और चेक करें कि मौसम परिवर्तन अपडेट हैं या नहीं?
शनमुगसुंदरम्

1
यह "निर्धारित वापस" उत्तर पूरी तरह से इस समाधान के साथ जुड़े स्पष्टीकरण और सुरक्षा जोखिमों को छोड़ देता है।
मैनुअल


0

मेरे मामले में मुझे अपने सिम्युलेटर में इस मुद्दे का सामना करना पड़ा क्योंकि मेरे कंप्यूटर की तारीख वर्तमान तारीख से पीछे थी। इसलिए एसएसएल त्रुटि का सामना करने पर भी इस मामले की जांच करें।


0

मुझे प्लेबैक पर त्रुटि हो रही थी

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 और समस्या हल करने के लिए वीडियो यूआरएल सेट।


0

मुझे कुछ नेटवर्क कॉल के लिए यह त्रुटि मिल रही थी और अन्य नहीं। मैं एक सार्वजनिक वाईफाई से जुड़ा था। यह मुफ्त वाईफाई कुछ URL और इसलिए त्रुटि के साथ छेड़छाड़ करने वाला लग रहा था।

जब मैं LTE से जुड़ा तो वह त्रुटि दूर हो गई!

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.