दिलचस्प पोस्ट
सिस्टम में कनवर्ट करें। ड्रॉइंग। Icon को System.Media.ImageSource shouldAutorotateToInterfaceOrientation आईओएस 6 में काम नहीं कर रहा है घातक त्रुटि: 134217728 बाइट्स की मात्रा का अनुमत मेमोरी आकार (CodeIgniter + XML-RPC) ओएस एक्स एल कैपिटन में "प्रतिबंधित" फ़ोल्डर / फाइलें जावास्क्रिप्ट: एक * स्ट्रिंग * संख्या के दशमलव की संख्या कैसे प्राप्त करें? सी फ़ंक्शन कॉल्स में डिफ़ॉल्ट तर्क प्रचार WPF सूची देखें चयन बंद करें मैं HTML <select> तत्व के लिए डिफ़ॉल्ट मान कैसे सेट कर सकता हूं? क्या .नेट संग्रह सबसे तेज़ खोज प्रदान करता है सी ++ संदर्भ से मुक्त या संदर्भ-संवेदनशील है? एनएसडीट 5 घंटे बंद है क्वेरी पैटर्न का कार्यान्वयन नहीं मिला Double.parseDouble (स्ट्रिंग) और Double.valueOf (स्ट्रिंग) में अंतर क्या है? Xcode एक दुर्घटना का कारण बनता है जो लाइन नहीं दिखाता जावा में स्टेटिक ब्लॉक

CFNetwork SSLHandshake आईओएस 9 में विफल रहा

आईओएस 9 बीटा 1 के साथ कोई भी यह समस्या थी?

मैं एक webservice से कनेक्ट करने के लिए मानक NSURLConnection का उपयोग करता हूं और जैसे ही कॉल सेवा के लिए कॉल किया जाता है, मुझे नीचे त्रुटि मिलती है I यह वर्तमान में आईओएस 8.3 में काम कर रहा है

संभावित बीटा बग? किसी भी विचार या विचार महान होगा! मैं आईओएस 9 के विकास के बारे में बहुत जल्दी जानता हूं

यहां पूर्ण त्रुटि है:

CFNetwork SSLHandshake विफल (-9824) NSURL सत्र / NSURL कनेक्शन कनेक्शन HTTP लोड विफल (kCFStreamErrorDomainSSL, -9824)

NSURLRequest * urlRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:@"https://mywebserviceurl"]]; NSURLResponse * response = nil; NSError * error = nil; NSData * data = [NSURLConnection sendSynchronousRequest:urlRequest returningResponse:&response error:&error]; 

वेब के समाधान से एकत्रित समाधान "CFNetwork SSLHandshake आईओएस 9 में विफल रहा"

आईओएस 9 और ओएसएक्स 10.11 को उन सभी होस्ट के लिए TLSv1.2 एसएसएल की ज़रूरत है जो आप डेटा का अनुरोध करने की योजना बनाते हैं, जब तक कि आप अपने ऐप की Info.plist फ़ाइल में अपवाद डोमेन निर्दिष्ट नहीं करते।

Info.plist कॉन्फ़िगरेशन के लिए सिंटैक्स इस तरह दिखता है:

 <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>NSExceptionAllowsInsecureHTTPLoads</key> <true/> <!--Include to specify minimum TLS version--> <key>NSExceptionMinimumTLSVersion</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 का उपयोग करने के लिए अपने सर्वर को अपडेट करने के लिए शायद सबसे अच्छा है, अगर वे पहले से ऐसा नहीं कर रहे हैं इसे अस्थायी रूपरेखा माना जाना चाहिए।

आज के अनुसार, पूर्व-प्रलेख दस्तावेज इन विशेषताओं में से किसी भी विशिष्ट तरीके से कोई भी उल्लेख नहीं करता है। एक बार ऐसा करने के बाद, मैं प्रासंगिक दस्तावेज से लिंक करने के लिए उत्तर को अपडेट कर दूँगा।

** आईओएस 10 बीटा के लिए महत्वपूर्ण नोट: **

आईओएस 10 में, टीएलएस स्ट्रिंग जरूरी है "TLSv1.0"। यह सिर्फ "1.0" नहीं हो सकता हां, यह अविश्वसनीय रूप से बेवकूफ और ऐप-ब्रेकिंग है। आईओएस विकास में आपका स्वागत है


उपरोक्त सलाह के निम्नलिखित संयोजन काम करता है

मान लीजिए कि आप एक होस्ट (YOUR_HOST.COM) से कनेक्ट करने का प्रयास कर रहे हैं, जिसमें केवल TLS 1.0 है।

अपने ऐप के Info.plist में इन्हें जोड़ें

 <key>NSAppTransportSecurity</key> <dict> <key>NSExceptionDomains</key> <dict> <key>YOUR_HOST.COM</key> <dict> <key>NSIncludesSubdomains</key> <true/> <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key> <true/> <key>NSTemporaryExceptionMinimumTLSVersion</key> <string>TLSv1.0</string> <key>NSTemporaryExceptionRequiresForwardSecrecy</key> <false/> </dict> </dict> </dict> 

अधिक जानकारी के लिए IOS 9 और OSX 10.11 में ऐप ट्रांसपोर्ट सुरक्षा अपवादों को कॉन्फ़िगर करना

विचित्र रूप से, आप देखेंगे कि कनेक्शन आपके प्रोटोकॉल को अपने कोड में गलतियों से बचाने के लिए http प्रोटोकॉल को https में बदलने का प्रयास करता है, जहां आपको गलती से यूआरएल को गलत तरीके से कॉन्फ़िगर किया जा सकता है। कुछ मामलों में, यह वास्तव में काम कर सकता है, लेकिन यह भी भ्रमित है।

यह ऐप ट्रांसपोर्ट सुरक्षा के साथ एक एप शिपिंग एक अच्छा डिबगिंग टिप्स को कवर करता है

एटीएस विफलता

अधिकांश एटीएस विफलता -9800 श्रृंखला में एक कोड के साथ CFErrors के रूप में पेश होगा ये सुरक्षा / SecureTransport.h शीर्ष लेख में परिभाषित किए गए हैं

 2015-08-23 06:34:42.700 SelfSignedServerATSTest[3792:683731] NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9813) 

CFNETWORK_DIAGNOSTICS

विफलता के बारे में कंसोल पर अधिक जानकारी प्राप्त करने के लिए पर्यावरण चर CFNETWORK_DIAGNOSTICS को 1 पर सेट करें

nscurl

उपकरण एटीएस अपवाद के कई विभिन्न संयोजनों के माध्यम से चलेगा, प्रत्येक एटीएस कॉन्फ़िगरेशन के अंतर्गत दिए गए होस्ट के लिए एक सुरक्षित कनेक्शन का प्रयास करेगा और परिणाम की रिपोर्ट करेगा।

 nscurl --ats-diagnostics https://example.com 

यदि आपका बैकएंड एक सुरक्षित कनेक्शन की चींटी का उपयोग करता है तो आप NSURLSession का उपयोग कर सकते हैं

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

आपको एटीएस संस्करण और एसएसएल प्रमाणपत्र प्राप्त करने के लिए विशेष रूप से अपने सर्वर कॉन्फ़िगरेशन की जांच करना आवश्यक है:

NSExceptionAllowsInsecureHTTPLoads = YES स्थापना के NSExceptionAllowsInsecureHTTPLoads = YES असुरक्षित कनेक्शन की अनुमति देने के बजाय, एटीएस (या सर्वर पक्ष को ठीक करने के लिए बेहतर) के लिए आपके सर्वर न्यूनतम आवश्यकता (v1.2) को पूरा न करने की स्थिति में आपको कम सुरक्षा की अनुमति की आवश्यकता है।

एकल सर्वर में सुरक्षा को कम करना

 <key>NSExceptionDomains</key> <dict> <key>api.yourDomaine.com</key> <dict> <key>NSExceptionMinimumTLSVersion</key> <string>TLSv1.0</string> <key>NSExceptionRequiresForwardSecrecy</key> <false/> </dict> </dict> 

प्रमाणपत्र की जांच करने के लिए openssl क्लाइंट का उपयोग करें और अपने सर्वर कॉन्फ़िगरेशन को openssl क्लाइंट का उपयोग करें:

 openssl s_client -connect api.yourDomaine.com:port //(you may need to specify port or to try with https://... or www.) 

अंत में खोजें

 SSL-Session: Protocol : TLSv1 Cipher : AES256-SHA Session-ID: // Session-ID-ctx: Master-Key: // Key-Arg : None Start Time: 1449693038 Timeout : 300 (sec) Verify return code: 0 (ok) 

ऐप ट्रांसपोर्ट सुरक्षा (एटीएस) ट्रांसपोर्ट लेयर सिक्योरिटी (टीएलएस) प्रोटोकॉल संस्करण 1.2 की आवश्यकता है।

एटीएस प्रयोग करने के लिए कनेक्ट करने की आवश्यकता:

ऐप ट्रांसपोर्ट सुरक्षा (एटीएस) का उपयोग करने के लिए वेब सेवा कनेक्शन की आवश्यकता में सर्वर, कनेक्शन सिफर और प्रमाण पत्र शामिल हैं, निम्नानुसार:

प्रमाणपत्र निम्न प्रकार की कुंजी में से एक के साथ हस्ताक्षरित होना चाहिए:

  • सिक्योर हैश एल्गोरिथम 2 (एसएचए -2) की कम से कम 256 की डाइजेस्ट लंबाई (जो कि, एसएचए -256 या अधिक) के साथ है
  • कम से कम 256 बिट के आकार के साथ अंडाकार-कर्व क्रिप्टोग्राफ़ी (ईसीसी) कुंजी

  • कम से कम 2048 बिट्स की लंबाई वाली रिवेस्ट-शमीर-एडलेमेन (आरएसए) कुंजी एक असफल प्रमाणपत्र और कोई कनेक्शन नहीं होने पर एक अमान्य प्रमाणपत्र परिणाम।

निम्नलिखित कनेक्शन सिफर आगे गोपनीयता (एफएस) का समर्थन करते हैं और एटीएस के साथ काम करते हैं:

TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA

अद्यतन: यह पता चला है कि openssl केवल न्यूनतम प्रोटोकॉल संस्करण प्रोटोकॉल प्रदान करता है: TLSv1 लिंक

दो दिनों के प्रयासों और असफलताओं के बाद, मेरे लिए क्या काम है वो इस विधेयक का कोड है

एक परिवर्तन के साथ, इस पोस्ट के अनुसार हमें एनएसई एक्सपैशन ड्यूमेन्स डिक्शनरी के इस तरह के कन्वेंशन के साथ जुड़े उप-चाबियों का उपयोग करना बंद कर देना चाहिए

  NSTemporaryExceptionMinimumTLSVersion 

और नए कन्वेंशन में उपयोग करें

  NSExceptionMinimumTLSVersion 

बजाय।

सेब दस्तावेज़

मेरा कोड

 <key>NSAppTransportSecurity</key> <dict> <key>NSExceptionDomains</key> <dict> <key>YOUR_HOST.COM</key> <dict> <key>NSExceptionAllowsInsecureHTTPLoads</key> <true/> <key>NSExceptionMinimumTLSVersion</key> <string>TLSv1.0</string> <key>NSExceptionRequiresForwardSecrecy</key> <false/> <key>NSIncludesSubdomains</key> <true/> </dict> </dict> </dict> 

एक और उपयोगी उपकरण है एनएमएपी (शराब बनाना एनएमएपी स्थापित करें)

 nmap --script ssl-enum-ciphers -p 443 google.com 

आउटपुट देता है

 Starting Nmap 7.12 ( https://nmap.org ) at 2016-08-11 17:25 IDT Nmap scan report for google.com (172.217.23.46) Host is up (0.061s latency). Other addresses for google.com (not scanned): 2a00:1450:4009:80a::200e PORT STATE SERVICE 443/tcp open https | ssl-enum-ciphers: | TLSv1.0: | ciphers: | TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA (secp256r1) - A | TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA (secp256r1) - A | TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (secp256r1) - A | TLS_RSA_WITH_AES_128_CBC_SHA (rsa 2048) - A | TLS_RSA_WITH_3DES_EDE_CBC_SHA (rsa 2048) - C | TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (secp256r1) - A | TLS_RSA_WITH_AES_256_CBC_SHA (rsa 2048) - A | compressors: | NULL | cipher preference: server | TLSv1.1: | ciphers: | TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA (secp256r1) - A | TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA (secp256r1) - A | TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (secp256r1) - A | TLS_RSA_WITH_AES_128_CBC_SHA (rsa 2048) - A | TLS_RSA_WITH_3DES_EDE_CBC_SHA (rsa 2048) - C | TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (secp256r1) - A | TLS_RSA_WITH_AES_256_CBC_SHA (rsa 2048) - A | compressors: | NULL | cipher preference: server | TLSv1.2: | ciphers: | TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA (secp256r1) - A | TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 (secp256r1) - A | TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 (secp256r1) - A | TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA (secp256r1) - A | TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 (secp256r1) - A | TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 (secp256r1) - A | TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 (secp256r1) - A | TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (secp256r1) - A | TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 (secp256r1) - A | TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (secp256r1) - A | TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (secp256r1) - A | TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 (secp256r1) - A | TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (secp256r1) - A | TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 (secp256r1) - A | TLS_RSA_WITH_3DES_EDE_CBC_SHA (rsa 2048) - C | TLS_RSA_WITH_AES_128_CBC_SHA (rsa 2048) - A | TLS_RSA_WITH_AES_128_CBC_SHA256 (rsa 2048) - A | TLS_RSA_WITH_AES_128_GCM_SHA256 (rsa 2048) - A | TLS_RSA_WITH_AES_256_CBC_SHA (rsa 2048) - A | TLS_RSA_WITH_AES_256_CBC_SHA256 (rsa 2048) - A | TLS_RSA_WITH_AES_256_GCM_SHA384 (rsa 2048) - A | compressors: | NULL | cipher preference: client |_ least strength: C Nmap done: 1 IP address (1 host up) scanned in 5.48 seconds 

यह त्रुटि लॉग में कभी-कभी दिख रही थी जब मैं एक छोटी गाड़ी / क्रैशी कॉर्डोवा आईओएस संस्करण का उपयोग कर रहा था। जब मैं कॉर्डोबा IOS को अपग्रेड या डाउनग्रेड किया, तो यह चले गए।

जिस सर्वर से मैं कनेक्ट हो रहा था वह TLSv1.2 SSL का उपयोग कर रहा था, इसलिए मुझे पता था कि यह समस्या नहीं थी।

इस प्रोजेक्ट में .plist फ़ाइल में यह अनुमति जोड़ें:

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

Info.plist कॉन्फ़िगरेशन के लिए वाक्यविन्यास

  <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>NSExceptionAllowsInsecureHTTPLoads</key> <true/> <!--Include to specify minimum TLS version--> <key>NSExceptionMinimumTLSVersion</key> <string>TLSv1.1</string> </dict> </dict> 

अपडेट किया गया उत्तर (पोस्ट- WWDC 2016):

2016 के अंत तक आईओएस क्षुधा को सुरक्षित HTTPS कनेक्शन की आवश्यकता होगी। एटीएस बंद करने की कोशिश में आपका ऐप भविष्य में अस्वीकार कर सकता है।

ऐप ट्रांसपोर्ट सिक्योरिटी, या एटीएस, एक ऐसी विशेषता है जिसे एप्पल आईओएस 9 में पेश किया गया था। एटीएस सक्षम होने पर, यह एक एप को वेब सेवाओं से कनेक्ट करने के लिए मजबूर करता है, न कि सुरक्षित सुरक्षित HTTP के बजाय कनेक्शन

हालांकि, डेवलपर्स अभी भी एटीएस बंद कर सकते हैं और उपरोक्त उत्तरों में वर्णित एक HTTP कनेक्शन पर डेटा भेज सकते हैं। 2016 के अंत में, एप सभी डेवलपर्स के लिए एटीएस अनिवार्य बना देगा जो ऐप स्टोर में अपने ऐप सबमिट करने की आशा करते हैं। संपर्क

क्यों यह बहुत जटिल बनाता है-

बस आईओएस विकास लक्ष्य निर्धारित करें – 8.0

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

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

और सीएमडी + शिफ्ट + के

जिस डिवाइस पर मैंने परीक्षण किया वह गलत समय सेट था। इसलिए जब मैंने एक प्रमाण पत्र के साथ एक पेज तक पहुंचने की कोशिश की, जो जल्द ही समाप्त हो जाएगी तो यह एक्सेस से इनकार कर देगा क्योंकि डिवाइस हालांकि प्रमाण पत्र की समय सीमा समाप्त हो गया था। ठीक करने के लिए, डिवाइस पर उचित समय निर्धारित करें!

info.plist के नीचे या केवल कॉपी और पिछली आईओएस 9.2 तक मेरे लिए यह काम करते हैं

 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict> <key>CFBundleDevelopmentRegion</key> <string>en</string> <key>CFBundleExecutable</key> <string>$(EXECUTABLE_NAME)</string> <key>CFBundleIdentifier</key> <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string> <key>CFBundleInfoDictionaryVersion</key> <string>6.0</string> <key>CFBundleName</key> <string>$(PRODUCT_NAME)</string> <key>CFBundlePackageType</key> <string>APPL</string> <key>CFBundleShortVersionString</key> <string>1.0</string> <key>CFBundleSignature</key> <string>????</string> <key>CFBundleVersion</key> <string>1.0</string> <key>LSRequiresIPhoneOS</key> <true/> <key>UILaunchStoryboardName</key> <string>LaunchScreen</string> <key>UIMainStoryboardFile</key> <string>Main</string> <key>UIRequiredDeviceCapabilities</key> <array> <string>armv7</string> </array> <key>UISupportedInterfaceOrientations</key> <array> <string>UIInterfaceOrientationPortrait</string> <string>UIInterfaceOrientationLandscapeLeft</string> <string>UIInterfaceOrientationLandscapeRight</string> </array> <key>UISupportedInterfaceOrientations~ipad</key> <array> <string>UIInterfaceOrientationPortrait</string> <string>UIInterfaceOrientationPortraitUpsideDown</string> <string>UIInterfaceOrientationLandscapeLeft</string> <string>UIInterfaceOrientationLandscapeRight</string> </array> </dict> </plist>