समस्या: हमारा मोबाइल ऐप अब हमारी वेब-सेवा के लिए एक सुरक्षित कनेक्शन स्थापित नहीं कर सकता है क्योंकि iOS 9 अब एटीएस का उपयोग करता है।
पृष्ठभूमि: iOS 9 ऐप ट्रांसपोर्ट सिक्योरिटी का परिचय देता है
सर्वर सेटअप: Windows Server 2008 R2 SP1 (VM) IIS 7.5, SSL सेर्टिक डाइजेक्ट। विंडोज फ़ायरवॉल बंद।
कुंजी RSA 2048 बिट्स (ई 65537)
जारीकर्ता DigiCert SHA2 सुरक्षित सर्वर CA
हस्ताक्षर एल्गोरिथ्म SHA512withRSA
ये ऐप परिवहन सुरक्षा आवश्यकताएँ हैं:
सर्वर को कम से कम ट्रांसपोर्ट लेयर सिक्योरिटी (TLS) प्रोटोकॉल संस्करण 1.2 का समर्थन करना चाहिए। कनेक्शन सिफर उन तक सीमित हैं जो आगे गोपनीयता प्रदान करते हैं (नीचे दिए गए सिफर्स की सूची देखें।) SHA256 या बेहतर हस्ताक्षर हैश एल्गोरिथ्म का उपयोग करके प्रमाण पत्र पर हस्ताक्षर किए जाने चाहिए, जिसमें 2048 बिट या अधिक आरएसए कुंजी या 256 बिट या अधिक एलिप्टिक-कर्व शामिल हैं। (ईसीसी) कुंजी। अमान्य प्रमाणपत्रों के परिणामस्वरूप कड़ी विफलता और कोई कनेक्शन नहीं है। ये स्वीकृत साइपर हैं:
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
क्या करने की कोशिश की गई है:
- हमारे डोमेन को अनुमति देने के लिए मोबाइल ऐप में अपवादों को जोड़ना, लेकिन मैं इस असुरक्षित विधि के साथ नहीं जाना चाहता, मैं अपने एसएसएल को ठीक करना चाहता हूं।
- प्रयुक्त आईआईएस क्रिप्टो 'सबसे अच्छा अभ्यास', की कोशिश की 'पीसीआई', और कस्टम सेटअप का उपयोग करें। यहां तक कि क्रिप्टो सूट को केवल ऊपर की सूची में संशोधित करने और पुन: व्यवस्थित करने का प्रयास किया गया। प्रत्येक प्रयास के बाद, सर्वर को रिबूट किया जाता है, और एसएसएल लैब्स को चलाया गया (कैश को साफ़ करने के बाद)। मैं एफ रेटिंग से ए और यहां तक कि ए से भी सफल रहा, लेकिन इसके परिणामस्वरूप आईओएस 8 और 9 सुरक्षित कनेक्शन स्थापित करने में असमर्थ रहा। (NSURLErrorDomain कोड = -1200 और _kCFStreamErrorCodeKey = -98080)
- VM को पुनर्स्थापित किया और एक पॉवरशेल स्क्रिप्ट की कोशिश की। अपने IIS को एसएसएल परफेक्ट फॉरवर्ड सेक्रेसी और टीएलएस 1.2 के लिए सेट करें। मैंने एक दूसरा प्रयास भी किया, जहां मैंने पावर स्क्रिप्ट से साइफर्स को एक न्यूनतम सूची में संपादित किया, जो आवश्यक है।
परिणाम: हमेशा समान, ए या ए की रेटिंग। iOS8 और iOS9 सुरक्षित कनेक्शन पर बातचीत नहीं कर सकते हैं। हैंडशेक सिमुलेशन का परिणाम सफारी और आईओएस उत्पादों के लिए "प्रोटोकॉल या सिफर सूट बेमेल" है।
अद्यतन Apple समर्थन के साथ काम करने के बाद, हमने कुछ पैकेट ट्रेस कैप्चर किए:
$ tcpdump -n -r trace.pcap
reading from file trace.pcap, link-type EN10MB (Ethernet)
client > server [S], seq 1750839998, win 65535, length 0
server > client [S.], seq 2461151276, ack 1750839999, win 8192, length 0
client > server [.], ack 1, win 4104, length 0
client > server [P.], seq 1:175, ack 1, win 4104, length 174
server > client [R.], seq 1, ack 175, win 0, length 0
पहले तीन पैकेट क्लासिक SYN - SYN-ACK - ACK तीन तरह से हैंडशेक हैं जो टीसीपी कनेक्शन सेट करते हैं। चौथा पैकेट आईओएस है जो आपके सर्वर को एक टीएलएस क्लाइंट हैलो संदेश भेज रहा है, जो उस टीसीपी कनेक्शन पर टीएलएस कनेक्शन स्थापित करने का पहला कदम है। मैंने इस संदेश को अलग कर दिया है और यह काफी उचित लग रहा है। पांचवें पैकेट में सर्वर बस कनेक्शन को गिरा देता है (RST भेजकर)।
क्या किसी को पता है कि IIS 7.5 एक RST क्यों होगा?