IOS 9 ATS के साथ काम करने के लिए IIS 7.5 SSL \ TLS को कैसे कॉन्फ़िगर करें


11

समस्या: हमारा मोबाइल ऐप अब हमारी वेब-सेवा के लिए एक सुरक्षित कनेक्शन स्थापित नहीं कर सकता है क्योंकि 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

क्या करने की कोशिश की गई है:

  1. हमारे डोमेन को अनुमति देने के लिए मोबाइल ऐप में अपवादों को जोड़ना, लेकिन मैं इस असुरक्षित विधि के साथ नहीं जाना चाहता, मैं अपने एसएसएल को ठीक करना चाहता हूं।
  2. प्रयुक्त आईआईएस क्रिप्टो 'सबसे अच्छा अभ्यास', की कोशिश की 'पीसीआई', और कस्टम सेटअप का उपयोग करें। यहां तक ​​कि क्रिप्टो सूट को केवल ऊपर की सूची में संशोधित करने और पुन: व्यवस्थित करने का प्रयास किया गया। प्रत्येक प्रयास के बाद, सर्वर को रिबूट किया जाता है, और एसएसएल लैब्स को चलाया गया (कैश को साफ़ करने के बाद)। मैं एफ रेटिंग से ए और यहां तक ​​कि ए से भी सफल रहा, लेकिन इसके परिणामस्वरूप आईओएस 8 और 9 सुरक्षित कनेक्शन स्थापित करने में असमर्थ रहा। (NSURLErrorDomain कोड = -1200 और _kCFStreamErrorCodeKey = -98080) यहाँ छवि विवरण दर्ज करें
  3. 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 क्यों होगा?


मैंने फिर से Digicert से संपर्क किया, हमने ECC प्रमाणपत्र के लिए अपना RSA प्रमाणपत्र बदल दिया। मेरे पास अब iOS 9 सुरक्षित रूप से काम कर रहा है, लेकिन अब iOS 8 कई कॉन्फ़िगरेशन प्रयासों के तहत कनेक्ट नहीं होगा।
RobDigital

जवाबों:


5

सवाल पुराना है, लेकिन यह खोज के दौरान पाया जाएगा। मैंने उसी समस्या का हल खोजने के लिए कुछ समय बिताया। इस प्रकार मैं अपने परिणामों को दूसरों के साथ साझा करने के लिए उत्तर लिखने का निर्णय करता हूं।

संक्षिप्त उत्तर: आपको सिफर सूट के क्रम को निर्दिष्ट करने के लिए IIS क्रिप्टो का उपयोग नहीं करना चाहिए। मैं आपको स्थानीय नीति के माध्यम से सिफर सूट को कॉन्फ़िगर करने के लिए पहले निर्धारित क्रम को हटाने और फिर समूह नीति ("कंप्यूटर कॉन्फ़िगरेशन" \ "प्रशासनिक टेम्पलेट" \ "नेटवर्क" \ "एसएसएल कॉन्फ़िगरेशन सेटिंग्स") का उपयोग करने के लिए "डिफ़ॉल्ट" बटन पर क्लिक करने की सलाह देता हूं।

त्रुटि "प्रोटोकॉल या सिफर स्वीट मिसमैच" का कारण नीचे से एक हो सकता है :

  • आपका सर्वर कुछ "खराब सिफर सूट" का समर्थन करता है
  • आपका सर्वर कुछ सिफर सुइट का समर्थन नहीं करता है, जो समर्थित होना चाहिए TLS विनिर्देश से मेल खाती है।
  • आपका सर्वर HTTP / 2 का समर्थन करता है और इसमें काली प्रोटोकॉल से अन्य प्रोटोकॉल के ऊपर कुछ प्रोटोकॉल हैं, जो सूची में नहीं हैं । यह आम तौर पर समस्या को ठीक करने के लिए सिफर स्वीट्स के क्रम को बदलने के लिए पर्याप्त है।

अलग-अलग प्रणालियों पर सटीक काली सूची भिन्न हो सकती है। आप इंटरनेट में कुछ ब्लैक लिस्ट में पा सकते हैं। उदाहरण के लिए, RFC 7540 (हाइपरटेक्स्ट ट्रांसफर प्रोटोकॉल संस्करण 2 (HTTP / 2)) के परिशिष्ट A में एक सूची है। सिफ़र सुइट हैं TLS_RSA_WITH_AES_128_CBC_SHATLS 1.2 (देखें के लिए यहाँ ) और TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256और TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256टीएलएस 1.3 के लिए (देखें यहाँ )। TLS_ECDHE_ECDSA_*महत्वपूर्ण हैं केवल आप अण्डाकार घटता के साथ प्रमाणपत्र का उपयोग है। अन्य बहुत अच्छे सिफर सूट TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256अभी तक Microsoft द्वारा लागू नहीं किए गए हैं। इसके अतिरिक्त आप TLS_ECDHE_RSA_WITH_AES_256_CBC_SHAपुराने सिस्टम से कनेक्शन का समर्थन करने के लिए कम से कम जोड़ने के लिए और TLS_RSA_WITH_AES_128_CBC_SHAबहुत पुराने सिस्टम (एंड्रॉइड 2.3.7, जावा 6u45, ओपनएसएसएल 0.9.8y) का समर्थन करने के लिए विचार कर सकते हैं और TLS_RSA_WITH_3DES_EDE_CBC_SHAकेवल अगर आपको IE 8 / XP का समर्थन करने की आवश्यकता है। इस प्रकार आप आज का उपयोग कर सकते हैं, उदाहरण के लिए

TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA

विकलांग टीएलएस 1.0, टीएलएस 1.1 के साथ बेहतर सुरक्षा या बस है

TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256

अगर आपको अच्छी सुरक्षा और सबसे अच्छा प्रदर्शन करने की आवश्यकता है।

आप अपनी समस्या को हल करने के लिए उदाहरण के लिए सिफर सूट के निम्नलिखित लघु सेट कर सकते हैं:

TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256

नीचे मैंने विंडोज 10 पर कॉन्फ़िगरेशन का एक उदाहरण शामिल किया है। मैंने IIS 10 को आरएसए 2048 कुंजी के साथ क्वालिस एसएसएल लैब्स से + रेटिंग दिया है और लेट्स एनक्रिप्ट से फ्री एसएसएल सर्टिफिकेट दिया है

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

मैंने DES 56/56, RC2 128/128, RC2 40/128, RC2 56/128, RC4 128/128, RC4 40/128, RC4 56/128, RC4 64/128, ट्रिपल डेस 168/168, NULL को निष्क्रिय कर दिया। MD5, मल्टी-प्रोटोकॉल यूनिफाइड हैलो, PCT 1.0, SSL 2.0, SSL 3.0 और TLS 1.0 / 1.1 मैन्युअल रूप से रजिस्ट्री में ( KB245030 देखें )। मैंने टीएलएस 1.0 और टीएलएस 1.1 प्रोटोकॉल को केवल इसलिए निष्क्रिय कर दिया क्योंकि अब तक IIS में TLS_FALLBACK_SCSV (डाउनग्रेड अटैक) को रोका नहीं जा सकता, जिससे www.ssllabs.com की A + रेटिंग प्राप्त करना असंभव हो जाता है । मैं इसे एक नुकसान के रूप में देखता हूं, लेकिन टीएलएस 1.2 वर्तमान में बहुत व्यापक है। वैसे आप उपयोग कर सकते हैं DisabledByDefault: 1, लेकिन Enabled: 1टीएलएस 1.0 और टीएलएस 1.1 के लिए। यदि आप SQL Server 2008/2012 कंप्यूटर पर चलाएंगे तो यह सहायक हो सकता है। वेब सर्वर टीएलएस 1.0 और टीएलएस 1.1 का उपयोग नहीं करेगा, लेकिन एसक्यूएल सर्वर उपयोग करते हैं।

सबसे महत्वपूर्ण कदम, जो मेरे बहुत से समय को प्राप्त करते हैं और जो आपकी मुख्य समस्या है, वह सिफर सूट का विन्यास था। मैंने इसका उपयोग किया gpedit.msc। मैंने "कंप्यूटर कॉन्फ़िगरेशन" \ "प्रशासनिक टेम्पलेट" \ "नेटवर्क" \ "एसएसएल कॉन्फ़िगरेशन सेटिंग्स" को चुना और निम्नलिखित के लिए "एसएसएल सिफर सूट ऑर्डर" मान कॉन्फ़िगर किया

TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA

उपरोक्त आदेश इष्टतम नहीं हो सकता है और मुझे यकीन नहीं है, कि उपरोक्त सभी प्रोटोकॉल IIS 7.5 पर समर्थित हैं (मैंने विंडोज 10 से IIS 10.0 का उपयोग किया था)। फिर भी मुझे यकीन है कि आपकी समस्या सिफर सूट की सूची से संबंधित है, क्योंकि मुझे ठीक उसी तरह की समस्या थी, जैसा कि आपने सिफर सूट की सूची के साथ अपने प्रयोगों के दौरान बताई थी।

किसी भी तरह से, ग्रुप पॉलिटी में उपरोक्त सेटिंग्स को कॉन्फ़िगर करने और कंप्यूटर को रिबूट करने के बाद ( gpupdate /force /target:computerमेरे परीक्षणों में पर्याप्त नहीं था) मुझे A + रेटिंग और "हैंडशेक सिमुलेशन" भाग के परीक्षण परिणामों की निम्न सूची मिली:

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

कोई यह देख सकता है कि iOS निम्नलिखित ग्राहकों के लिए सफल है:

Safari 6 / iOS 6.0.1
Safari 7 / iOS 7.1
Safari 8 / iOS 8.4
Safari 9 / iOS 9

टीएलएस 1.2 का समर्थन नहीं करने वाले ग्राहक अब मेरे लिए महत्वपूर्ण नहीं हैं और मुझे लगता है कि विरासत क्लाइंट के समर्थन और सुरक्षित प्रोटोकॉल के उपयोग के बीच उपरोक्त विन्यास एक अच्छा समझौता है।


+1 को अपने आप को IISCrypto के साथ देखने के लिए, मैंने इसे गलत तरीके से 112 बिट 3DES अक्षम कीज़ को विंडोज़ पर सेट करते हुए देखा है ... इस टूल का उपयोग करते समय आशंकित।
felickz

0

यदि आपकी IIS क्रिप्टो छवि हाल ही में सेटिंग्स को बनाए रखती है, लेकिन वे SHA, डिफी-हेलमैन और PKCS को सक्षम करते हैं। यह आपको ए रेटिंग देगा लेकिन iOS 8 और लोअर को कनेक्ट करने की अनुमति देगा।


आप की सिफारिश के रूप में मैंने SHA, डिफी-हेलमैन और PKCS को सक्षम किया। सर्वर को फिर से शुरू किया और ssl प्रयोगशाला परीक्षण से छुटकारा दिलाया। कोई भाग्य नहीं। अभी भी खिचड़ी भाषा ios 9 के साथ कनेक्ट नहीं है, और अभी भी एसएसएल लैब्स पर "प्रोटोकॉल या सिफर सूट बेमेल" प्राप्त कर रहा है।
RobDigital

0

मैं कुछ दिनों तक इससे जूझता रहा। विशेष रूप से मैं OAuth2 बियरर टोकन प्रमाणीकरण के साथ ASP.NET वेब Api 2 बाकी सेवा से कनेक्ट करने के लिए Xamarin Forms PCL का उपयोग कर एक iOS ऐप से कनेक्ट कर रहा था।

अंत में मेरे लिए जो काम किया वह IIS क्रिप्टो की सर्वोत्तम प्रथाओं का उपयोग करना था। फिर रजिस्ट्री कुंजी को संपादित करें जो इसे सिफर सुइट ऑर्डर के लिए सेट करता है:

KEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Cryptography\Configuration\SSL\00010002\Function

मुझे निम्नलिखित मूल्य के साथ सफलता मिली:

TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P521, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P521, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P256, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P521, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P384, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA_P521, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA_P384, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA_P256, TLS_RSA_WITH_AES_256_GCM_SHA384, TLS_RSA_WITH_AES_128_GCM_SHA256, TLS_RSA_WITH_AES_256_CBC_SHA256, TLS_RSA_WITH_AES_256_CBC_SHA, TLS_RSA_WITH_AES_128_CBC_SHA256, TLS_RSA_WITH_AES_128_CBC_SHA, TLS_RSA_WITH_3DES_EDE_CBC_SHA, TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384_P521,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384_P384, TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256_P521, TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256_P384, TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256_P256, TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384_P521, TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384_P384, TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA_P521, TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA_P384, TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA_P256, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256_P521, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256_P384, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256_P256, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA_P521, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA_P384, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA_P256, TLS_DHE_RSA_WITH_AES_256_GCM_SHA384, TLS_DHE_RSA_WITH_AES_128_GCM_SHA256, TLS_DHE_DSS_WITH_AES_256_CBC_SHA256, TLS_DHE_DSS_WITH_AES_256_CBC_SHA, TLS_DHE_DSS_WITH_AES_128_CBC_SHA256,TLS_DHE_DSS_WITH_AES_128_CBC_SHA, TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA, TLS_RSA_WITH_RC4_128_SHA, 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_128_CBC_SHA256, TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, TLS_RSA_WITH_RC4_128_MD5, TLS_RSA_WITH_DES_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256

पिछले एक को चार्ल्स प्रॉक्सी का उपयोग करके पाया गया था, जिसने TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 पर स्वचालित रूप से बातचीत की। जो चीज मुझे इस ओर ले जाती है, वह थी कि चार्ल्स प्रोक्सी पर (सिम्युलेटर सर्टिफिकेट के साथ स्थापित) कनेक्शन सफल हो रहे थे, लेकिन अन्यथा विफल रहे। बातचीत में उपयोग किए गए सूट को जोड़कर यह चाल चली। ऐसा प्रतीत होता है (?) कि प्रॉक्सी मेरी बाकी सेवा के साथ फिर से जुड़ रही थी, जो मेरे सर्वर द्वारा समर्थित थी, लेकिन आईओएस क्लाइंट नहीं।

ध्यान दें कि कई सिफर सुइट्स विभिन्न iOS / OSX उपकरणों के लिए पसंदीदा सुइट्स के विनिर्देश से प्राप्त किए गए थे। उपरोक्त मान को सब कुछ के साथ लेकिन IE 6 को ssllabs के अनुसार XP पर ए रेटिंग के साथ हाथ मिलाना चाहिए

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