এনএসআরএলসেশন / এনএসআরএল সংযোগ HTTP লোড আইওএস 9 এ ব্যর্থ হয়েছে


137

আইওএস 9-তে আমার বিদ্যমান অ্যাপটি চালানোর চেষ্টা করেছি তবে ব্যবহারের সময় ব্যর্থতা পাচ্ছে AFURLSessionManager

__block NSURLSessionDataTask *task = [self.sessionManager dataTaskWithRequest:request completionHandler:^(NSURLResponse * __unused response, id responseObject, NSError *error) {
    if (error) {

    } else {

    }
}];

[task resume];

আমি নিম্নলিখিত ত্রুটি পেয়েছি:

Error Domain=NSURLErrorDomain Code=-999 "cancelled.

নিম্নলিখিত লগগুলি পাচ্ছে:

 NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9824
 CFNetwork SSLHandshake failed (-9824)

আপডেট: আমি আমার সমাধানে একাধিক আপডেট যুক্ত করেছি: এনএসআরএলসেশন / এনএসআরএল সংযোগ HTTP লোড আইওএস 9 এ ব্যর্থ হয়েছে


আপনি কি নিশ্চিত যে প্রথম লাইনে ত্রুটি ঘটছে?
বিএসএমপি

1
আমারো একই ইস্যু ছিল. : এই সমস্যা আবরণ করলো stackoverflow.com/questions/30720813/...
phillies2628

উত্তর:


240

সমাধান পাওয়া গেছে:

আইওএস 9-তে, এইচটিপিএস ব্যবহার সহ নেটওয়ার্ক কল চলাকালীন এটিএস সেরা অনুশীলনগুলি প্রয়োগ করে।

অ্যাপল ডকুমেন্টেশন থেকে:

এটিএস দুর্ঘটনাজনিত প্রকাশ প্রতিরোধ করে, সুরক্ষিত ডিফল্ট আচরণ সরবরাহ করে এবং গ্রহণ করা সহজ। আপনি কোনও নতুন অ্যাপ তৈরি করছেন বা বিদ্যমান অ্যাপ্লিকেশনটি আপডেট করছেন তা নির্বিশেষে আপনার যত তাড়াতাড়ি সম্ভব এটিএস গ্রহণ করা উচিত। আপনি যদি একটি নতুন অ্যাপ্লিকেশন বিকাশ করছেন তবে আপনার একচেটিয়াভাবে এইচটিটিপিএস ব্যবহার করা উচিত। আপনার যদি কোনও বিদ্যমান অ্যাপ থাকে তবে আপনার এই মুহুর্তে যতটা সম্ভব এইচটিটিপিএস ব্যবহার করা উচিত এবং যত তাড়াতাড়ি সম্ভব আপনার বাকী অ্যাপ্লিকেশন স্থানান্তর করার জন্য একটি পরিকল্পনা তৈরি করা উচিত।

বিটা 1 এ, বর্তমানে তথ্য.পরে তালিকাটিতে এটি সংজ্ঞায়িত করার কোনও উপায় নেই। সমাধানটি ম্যানুয়ালি যুক্ত করার জন্য:

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

এখানে চিত্র বর্ণনা লিখুন

আপডেট 1: আপনি আইওএস 9 এটিএস সমর্থন অবলম্বন করতে প্রস্তুত না হওয়া পর্যন্ত এটি একটি অস্থায়ী কাজ।

আপডেট 2: আরও তথ্যের জন্য দয়া করে নীচের লিঙ্কটি দেখুন: http://ste.vn/2015/06/10/configuring-app-transport- সুরক্ষা-ios-9-osx-10-11/

আপডেট 3: আপনি যদি কোনও হোস্টের সাথে সংযোগ স্থাপনের চেষ্টা করছেন (YOURHOST.COM) যার কেবলমাত্র TLS 1.0 রয়েছে

এগুলি আপনার অ্যাপ্লিকেশনটির তথ্য.পুলিস্টে যুক্ত করুন

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>YOURHOST.COM</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <key>NSTemporaryExceptionMinimumTLSVersion</key>
            <string>1.0</string>
            <key>NSTemporaryExceptionRequiresForwardSecrecy</key>
            <false/>
        </dict>
    </dict>
</dict>

10
আপনি সবেমাত্র অ্যাপ্লিকেশন পরিবহন সুরক্ষা সম্পূর্ণরূপে মুক্তি পেয়েছেন এ বিষয়ে সচেতন থাকুন, সুতরাং একটি বড় আইওএস 9 বৈশিষ্ট্যটি আপনার অ্যাপ থেকে সবেমাত্র চলে গেছে। এটি একটি হ্যাক, এবং যদি হ্যাকটি আপনার এপি প্রত্যাখ্যান করে তবে আমি অবাক হব না। এই অভিধানগুলিতে নির্দিষ্ট ওয়েবসাইট যুক্ত করার অনুমতি সম্ভবত দেওয়া হবে।
gnasher729

2
@ স্টিভেন পিটারসন আপনি কেবল অ্যাপল দ্বারা কেস-কেস-কেস ভিত্তিতে একটি সম্পূর্ণ অ্যাপ্লিকেশনকে বাদ দিতে পারবেন। আমি ধরে নিয়েছি যদি অ্যাপল আপনার অ্যাপ্লিকেশনটিকে এই ক্ষমতা দিয়ে আশীর্বাদ করে তবে তারা আপনাকে এই কীটি অন্তর্ভুক্ত করার নির্দেশ দেবে। আশা করি অ্যাপল খুব কমই এটি করবে।
মাত্তিওহে

8
দয়া করে, দয়া করে, দয়া করে, দয়া করে, দয়া করে - কেবল আপনার প্লিস্টের ব্যতিক্রম যুক্ত করবেন না এবং "কেবল এটি কাজ করে বলে" এগিয়ে যান। আপনার ব্যবহারকারীর ডেটার সুরক্ষা বিবেচনা করুন এবং এসএসএল এবং অন্যান্য সুরক্ষা সেরা অনুশীলনগুলি প্রয়োগ করুন।
সান্তা ক্লজ

8
@ gnasher729, আমি কেবল এটিএস অক্ষম না করে টিএলএস ১.২ সমর্থন করা আরও ভাল বুঝতে পেরেছি। তবে আপনি যদি কোনও তৃতীয় পক্ষের API / ওয়েব পরিষেবায় নির্ভর করেন তবে আপনি কী করতে পারেন। আমি তাদের আপগ্রেড করতে বাধ্য করতে পারি না, তাই আমি কী করতে পারি ??
উডস্টক

7
এই উত্তরে একটি সূক্ষ্ম ত্রুটি রয়েছে: NSTemporaryExceptionMinimumTLSVersionঅবশ্যই 1.0 এর পরিবর্তে TLSv1.0 হওয়া আবশ্যক , এনএসএপিট্রান্সপোর্টসিকিউরিটি ব্যতিক্রম ডোমেন অভিধানের কীগুলি দেখুন
এমবিআই

54

আইওএস 9-তে এসএসএলকে কীভাবে মোকাবেলা করতে হবে , এর একটি সমাধান হল:

অ্যাপল যেমন বলে: এখানে চিত্র বর্ণনা লিখুন এখানে চিত্র বর্ণনা লিখুন

এখানে চিত্র বর্ণনা লিখুন

আইওএস 9 এবং ওএসএক্স 10.11 এর জন্য আপনার সমস্ত অ্যাপ্লিকেশনটির তথ্য.পিস্টলিস্ট ফাইলে ব্যতিক্রম ডোমেনগুলি নির্দিষ্ট না করে আপনি যে সমস্ত হোস্ট থেকে ডেটা অনুরোধ করার পরিকল্পনা করছেন তার জন্য TLSv1.2 SSL দরকার require

তথ্য.পল্লিস্ট কনফিগারেশনের সিনট্যাক্সটি দেখতে এমন দেখাচ্ছে:

<key>NSAppTransportSecurity</key>
<dict>
  <key>NSExceptionDomains</key>
  <dict>
    <key>yourserver.com</key>
    <dict>
      <!--Include to allow subdomains-->
      <key>NSIncludesSubdomains</key>
      <true/>
      <!--Include to allow insecure HTTP requests-->
      <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
      <true/>
      <!--Include to specify minimum TLS version-->
      <key>NSTemporaryExceptionMinimumTLSVersion</key>
      <string>TLSv1.1</string>
    </dict>
  </dict>
</dict>

যদি আপনার অ্যাপ্লিকেশন (উদাহরণস্বরূপ একটি তৃতীয় পক্ষের ওয়েব ব্রাউজার) স্বেচ্ছাসেবক হোস্টগুলির সাথে সংযোগ স্থাপনের প্রয়োজন হয়, আপনি এটি এটির মতো কনফিগার করতে পারেন:

<key>NSAppTransportSecurity</key>
<dict>
    <!--Connect to anything (this is probably BAD)-->
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

আপনি যদি এটি করতেই থাকেন তবে আপনার সার্ভারগুলি TLSv1.2 এবং SSL ব্যবহার করার জন্য তারা ইতিমধ্যে এটি না করে থাকলে আপডেট করা ভাল। এটি একটি অস্থায়ী কর্মক্ষেত্র হিসাবে বিবেচনা করা উচিত।

আজ অবধি, পূর্বনির্ধারিত ডকুমেন্টেশনগুলি কোনও নির্দিষ্ট উপায়ে এই কনফিগারেশন বিকল্পগুলির কোনও উল্লেখ করে না। এটি হয়ে গেলে, আমি প্রাসঙ্গিক ডকুমেন্টেশনের লিঙ্কের উত্তর আপডেট করব।

আরও তথ্যের জন্য, iOS9 অ্যাডাপ্টেশন টিপস এ যান


4
এসএসএল এবং টিএলএস এইচটিটিপিএস প্রোটোকল দ্বারা ব্যবহৃত আলাদা আলাদা এনক্রিপশন স্তর। সুতরাং, একজনের পুরোপুরি এসএসএল নিষ্ক্রিয় করা উচিত এবং টিএলএস v1.2 বা তার পরে ব্যবহার করা উচিত। আরও তথ্যের জন্য, আমি নিম্নলিখিত উত্সটি দিয়ে শুরু করার পরামর্শ দেব: এসএসএল / টিএলএস সুরক্ষা 2015 - একটি সরলীকৃত দ্রুত গাইড
কনরাড টেলর

2
আপনি কেবল নীচের উদাহরণের সাথে কোনও ভাগ্য যুক্ত করেছেন যেখানে আপনি এনএসএল্লোআরবিটরিলডগুলি সত্য হিসাবে সেট করেছেন। আমার সার্ভারটি টিএলএস ভি 1.2 একচেটিয়াভাবে ব্যবহার করছে এবং এটি কাজ করতে আমাকে এখনও এটি করতে হবে। খুবই হতাশাজনক.
স্কুটার

1
তাহলে আমি কী জানি যে আমার নতুন অ্যাপ্লিকেশন স্টোর যেমন একটি প্রক্সি পরিষেবাদি যেমন অ্যাপ স্টোরটিতে অনুমোদন পাবে তা নিশ্চিত হয়ে আমি কী ব্যবহার করতে পারি?
জোশ

41

অ্যাপ ট্রান্সপোর্ট সুরক্ষা অন অ্যাপল টেকনোট খুব সুবিধাজনক ; এটি আমাদের সমস্যাটির আরও সুরক্ষিত সমাধান খুঁজতে সহায়তা করেছে।

আশা করি এটি অন্য কাউকে সহায়তা করবে। টিএলএসভি 12 এইচটিপিএস ইউআরএল পুরোপুরি বৈধ বলে মনে হয়েছে অ্যামাজন এস 3 ইউআরএলগুলির সাথে সংযোগ করার ক্ষেত্রে আমরা সমস্যা ছিল। দেখা যাচ্ছে NSExceptionRequiresForwardSecrecyযে এস 3 ব্যবহার করে এমন একটি মুষ্টিমেয় সাইফার সক্ষম করতে আমাদের অক্ষম করতে হয়েছিল।

আমাদের মধ্যে Info.plist:

<key>NSAppTransportSecurity</key>
<dict>
  <key>NSExceptionDomains</key>
  <dict>
    <key>amazonaws.com</key>
    <dict>
      <key>NSIncludesSubdomains</key>
      <true/>
      <key>NSExceptionRequiresForwardSecrecy</key>
      <false/>
    </dict>
  </dict>
</dict>

এটি আমার সঠিক সমস্যা ছিল এবং এটি এটি তাত্ক্ষণিকভাবে ঠিক করে দিয়েছে! ধন্যবাদ! :)
অ্যালেক্স জাক

এটি আমারও সমস্যাটি সমাধান করে; যদিও বিভিন্ন ক্ষেত্রে বিভিন্ন সেটিংসের প্রয়োজন হতে পারে। সুসংবাদটি হ'ল তিনি সাধারণভাবে সঠিক সেটিংস সন্ধান করতে আপনাকে কীভাবে এনএসআরএল ব্যবহার করবেন সে সম্পর্কে তথ্য প্রযুক্তিতেও রয়েছে।
ইকোট্যাক্স

আমি যদি আমাজন এস 3 এর সামনে সিডিএন ব্যবহার করি তবে ক্লাউডফ্রন্ট.নেটের জন্য আমার একই কাজ করা দরকার।
রেমন্ড 26

7

আমার মত অ্যামাজন এস 3 এর সাথে যদি আপনার সমস্যা হয়, তবে আপনার শীর্ষ স্তরের ট্যাগের সরাসরি শিশু হিসাবে আপনার তথ্য.পিস্টে এটি আটকে দেওয়ার চেষ্টা করুন

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>amazonaws.com</key>
        <dict>
              <key>NSThirdPartyExceptionMinimumTLSVersion</key>
              <string>TLSv1.0</string>
              <key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
              <false/>
              <key>NSIncludesSubdomains</key>
              <true/>
        </dict>
        <key>amazonaws.com.cn</key>
        <dict>
              <key>NSThirdPartyExceptionMinimumTLSVersion</key>
              <string>TLSv1.0</string>
              <key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
              <false/>
              <key>NSIncludesSubdomains</key>
              <true/>
        </dict>
    </dict>
</dict>

আপনি এখানে আরও তথ্য পেতে পারেন:

http://docs.aws.amazon.com/mobile/sdkforios/developerguide/ats.html#resolving-the-issue



5

আমি এখান থেকে সমাধান খুঁজে পেয়েছি এবং এটা আমার জন্য কাজ করে।

এটি পরীক্ষা করুন, এটি আপনাকে সাহায্য করতে পারে।

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
         <dict>
             <key>myDomain.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>

4

আপনার .plist ফাইলটিতে কেবল নিম্নলিখিত ক্ষেত্রগুলি যুক্ত করুন

এখানে চিত্র বর্ণনা লিখুন

সিনট্যাক্স এর মতো দেখাচ্ছে:

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

এটি সমস্ত HTTP অনুরোধের অনুমতি দেবে। কাজ করে, তবে প্রস্তাবিত নয়।
কেভিশ

2

হালনাগাদ:

এক্সকোড .1.১ অনুসারে, আপনাকে NSAppTransportSecurityঅভিধানে ম্যানুয়ালি প্রবেশ করতে হবে না info.plist

এটি এখন আপনার জন্য স্ব-পরিপূর্ণ হবে, এটি একটি অভিধানের উপলব্ধি করবে এবং তারপরে লোডগুলিও স্বতঃপূরণ করবে Allows Arbitraryinfo.plist স্ক্রিনশট


এটি সমস্ত HTTP অনুরোধের অনুমতি দেবে। কাজ করে, তবে প্রস্তাবিত নয়।
কেভিশ

2

এনএসআরএল সংযোগটি সমাধান করুন এইচটিপিপি লোড ব্যর্থ হয়েছে বাগ.শুধু তথ্য.পাল্টিতে নিম্নলিখিত ডিক্ট যুক্ত করুন:

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

1

আমি info.plist এ কিছু কী যুক্ত করে এটি সমাধান করেছি। আমি অনুসরণিত পদক্ষেপগুলি হ'ল:

আমি আমার প্রকল্পের তথ্য.পলিট ফাইলটি খুললাম

অভিধান হিসাবে এনএসএপিটান্সপোর্টসিকিউরিটি নামে একটি কী যুক্ত করা হয়েছে।

বুলিয়ান হিসাবে এনএসএলোজআরবিট্রেইলওডস নামে একটি সাবকি যুক্ত করা হয়েছে এবং নীচের চিত্রের মতো এর মানটি হ্যাঁ সেট করে। এখানে চিত্র বর্ণনা লিখুন

প্রকল্পটি পরিষ্কার করুন এবং এখন সব কিছু ঠিক আগের মতো চলছে।

রেফ লিঙ্ক: https://stackoverflow.com/a/32609970


1

আমার যখন এই ত্রুটি হয়েছিল তখন এটি আমার জন্য কাজ করেছিল:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>example.com</key>
        <dict>
            <key>NSExceptionRequiresForwardSecrecy</key>
            <false/>
            <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSTemporaryExceptionMinimumTLSVersion</key>
            <string>TLSv1.0</string>
        </dict>
    </dict>
</dict>

1

আপনি এই ফাংশনটি আরসিটিএইচটিটিপিআরকিউস্টএইচেন্ডেলআরএম ফাইল যুক্ত করার চেষ্টা করতে পারেন

- (void)URLSession:(NSURLSession *)session didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential *credential))completionHandler { completionHandler(NSURLSessionAuthChallengeUseCredential, [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust]); }


1

উপরের উল্লিখিত উত্তরের পাশাপাশি আপনার ইউআরএলটি পুনরায় পরীক্ষা করুন


আমার ক্ষেত্রে আমি .html ফাইল লোড করার চেষ্টা করছিলাম।
বৈষ্ণবী

0

আপনার যুক্ত App Transport Security Settingsকরা info.plistএবং যুক্ত Allow Arbitrary Loadsকরা উচিতApp Transport Security Settings

এখানে চিত্র বর্ণনা লিখুন

<key>NSAppTransportSecurity</key>
    <dict>
        <key>NSAllowsArbitraryLoads</key>
        <true/>
    </dict>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.