2012-07-05 21 views
5

समस्या सारांश: वही क्लाइंट-सर्वर विन्यास, एक ही नेटवर्क टोपोलॉजी, एक ही डिवाइस (बोल्ड 9900) - ओएस 7.0 पर पूरी तरह से अच्छी तरह से काम करता है लेकिन काम नहीं करता है जैसा कि ओएस 7.1 पर सुरक्षित है और सुरक्षित tls कनेक्शन बहुत कम समय के बाद सर्वर द्वारा बंद किया जा रहा है।ब्लैकबेरी ओएस 7.1 सुरक्षित TLS कनेक्शन बहुत ही कम समय के बाद बंद कर दिया है

प्रश्न: क्या ओएस 7.0 और ओएस 7.1 के बीच सुरक्षित टीएलएस कनेक्शन खोलने में कोई अंतर होना चाहिए? क्या आरआईएम ने 7.1 में टीएलएस बुनियादी ढांचे में कुछ भी बदल दिया? क्या ऐसा कुछ है जो 7.1 में समय से सुरक्षित सुरक्षित टीएलएस कनेक्शन बंद कर सकता है?

मेरा एप्लिकेशन किसी सर्वर से सुरक्षित Tls कनेक्शन खोलता है। कनेक्शन को एक परत परत द्वारा जीवित तंत्र द्वारा जीवित रखा जाता है और क्लाइंट इसे बंद होने तक खुला रहता है। संलग्न वास्तविक कोड का सरलीकृत संस्करण है जो कनेक्शन खोलता है और सॉकेट से पढ़ता है। कोड ओएस 5.0-7.0 पर पूरी तरह से काम करता है लेकिन ओएस 7.1 पर अपेक्षित काम नहीं करता है।

जब बहुत ही कम समय (10-45 सेकंड) के बाद ओएस 7.1, साथ अवरुद्ध read() रिटर्न -1 (धारा के अंत तक पहुँच गया है) पर चल रहा है। ओएस 5.0-7.0 के लिए read() पर कॉल अगले डेटा तक पहुंचने तक अवरुद्ध रहता है और कनेक्शन सर्वर द्वारा कभी बंद नहीं होता है।

Connection connection = Connector.open(connectionString); 
connInputStream = connection.openInputStream(); 
while (true) { 
    try { 
     retVal = connInputStream.read(); 
     if (-1 == retVal) { 
      break; // end of stream has been reached 
     } 

    } catch (Exception e) { 
     // do error handling 
    } 

    // data read from stream is handled here 
} 

UPDATE 1:
जाहिर है, समस्या केवल प्रकट होता है जब मैं ओएस 7.1 पर टीएलएस कनेक्शन (या तो मोबाइल नेटवर्क या वाई-फाई का प्रयोग करके) सुरक्षित उपयोग करें। ओएस 7.1 पर एक गैर सुरक्षित कनेक्शन खोलते समय सब कुछ अपेक्षित काम करता है।

मोबाइल नेटवर्क मैं निम्नलिखित कनेक्शन स्ट्रिंग का उपयोग पर TLS के लिए:

connectionString = "tls://someipaddress:443;deviceside=false;ConnectionType=mds-**secret**;EndToEndDesired"; 

वाईफ़ाई पर TLS के लिए मैं निम्नलिखित कनेक्शन स्ट्रिंग का उपयोग करें:

connectionString = "tls://someipaddress:443;interface=wifi;EndToEndRequired" 

अद्यतन 2:
कनेक्शन कभी निष्क्रिय नहीं है। मैं लगातार डेटा प्राप्त कर रहा हूं और भेज रहा हूं। मोबाइल कनेक्शन और वाईफाई का उपयोग करते समय यह समस्या दोनों दिखाई देती है। यह मुद्दा वास्तविक ओएस 7.1 डिवाइस और सिमुलेटर पर दिखाई देता है। मुझे संदेह करना शुरू हो रहा है कि यह किसी भी तरह से कनेक्शन स्ट्रिंग या टीएलएस हैंडशेक से संबंधित है।

अद्यतन 3:
Wireshark के कैप्चर कि मैं ओएस 7.1 सिम्युलेटर के साथ किए गए के अनुसार, सुरक्षित TLS कनेक्शन सर्वर द्वारा बंद कर दिया जा रहा है (ग्राहक प्राप्त करता है फिन)। इस पल के लिए मेरे पास सर्वर की निजी कुंजी नहीं है इसलिए मैं टीएलएस हैंडशेक डीबग करने में असमर्थ हूं, लेकिन मुझे पहले से कहीं अधिक यकीन है कि मूल कारण टीएलएस हैंडशेक है।

अद्यतन 4:
सुरक्षित TLS कनेक्शन ड्रॉप प्रकट होता है जब आरएसए 2048 एईएस 256 सिफ़र सुइट ओएस 7.1 केवल पर बातचीत की है। वही सिफर सुइट ओएस 7.0 पर पूरी तरह से अच्छी तरह से काम करता है।दूसरी तरफ, डीएचई/डीएसएस 768 एईएस 128 सिफर सूट का उपयोग करते समय, सब कुछ ओएस 7.1 पर अपेक्षित काम करता है और कनेक्शन स्थिर रहता है। यह किसी भी तरह आरएसए 2048 एईएस 256 सिफर suite.ideas से संबंधित होना चाहिए?

+0

मैं विशेषज्ञ नहीं हूं लेकिन विशेष रूप से टीएलएस कनेक्शन के लिए सर्वर कॉन्फ़िगर किया जा सकता है? –

+0

@EugenMartynov सर्वर को ठीक से कॉन्फ़िगर किया गया है। वही सर्वर, एक ही क्लाइंट ओएस 5/6/7 चल रहा है -> सबकुछ पूरी तरह से काम करता है (सुरक्षित और सुरक्षित दोनों)। – mrvincenzo

+0

जब यह -1 (धारा का अंत) देता है तो क्या यह लगातार सेकंड के बाद ऐसा करता है? आपने "30-45" का उल्लेख किया है। यदि आप समय लगता है तो यह एक संकेत है कि यह किसी प्रकार का टाइमआउट मार रहा है। एक चाल जो मैंने उपयोग की है, वह यह है कि यह कहां से आ रहा है इसका निदान करने में सहायता के लिए 35 सेकंड जैसे 'अजीब' टाइमआउट को कॉन्फ़िगर करना है। क्या आपने https कनेक्शन स्ट्रिंग का उपयोग करने का प्रयास किया है? – seand

उत्तर

1

मैंने अंततः इसे आरआईएम की सहायता से समझ लिया है (आप प्रासंगिक टिकट here पा सकते हैं)। सभी क्रेडिट आरआईएम को जाता है।

ओएस 7.1 में, टीएलएस/एसएसएल कनेक्शन बनाते समय एक नया सुरक्षा उपाय। आरआईएम के लेख से उद्धरण यहां दिया गया है।

एक नया हमले हाल ही में पाया गया कि एक विरोधी जासूसी और चुने हुए प्लेन टेक्स्ट हमले के संयोजन का उपयोग TLS 1.0 और SSL 3.0 का यातायात डिक्रिप्ट करने के लिए जब सीबीसी चेनिंग मोड प्रयोग किया जाता है की अनुमति देता है।

इसका मुकाबला करने के लिए, हमने एक बदलाव लागू किया जो एसएसएल विनिर्देशों के अनुरूप था और अधिकांश ब्राउज़रों जैसे मोज़िला® फ़ायरफ़ॉक्स® और Google क्रोम ™ द्वारा व्यापक रूप से अपनाया गया था। हमने एक काउंटर उपाय लागू किया है जहां हमने टीएलएस रिकॉर्ड्स को दो रिकॉर्ड में विभाजित किया है: पहला रिकॉर्ड जिसमें डेटा का एक बाइट होता है और शेष डेटा वाले दूसरे रिकॉर्ड होते हैं, जो हमलावर को इस भेद्यता का शोषण करने से रोकते हैं।

पूर्ण लेख here तक पहुंचा जा सकता है।

एक लम्बी कहानी लघु इससे पहले कि मैं कनेक्शन खोला बनाने के लिए, क्रम में अपने सर्वर मैं जोड़ने के लिए किया था के साथ असंगति मुद्दों को कम करने में "DisableCbcSecurity = सच" कनेक्शन स्ट्रिंग के लिए विशेषता।

ध्यान दें कि यह वैकल्पिक हल चल संस्करण 7.1.0.288 और उच्च हालांकि मैं भी तो यह ठीक से मशाल 9860 पर काम कर 7.1.0.267 चलाने वाले उपकरणों के लिए काम करेंगे।

2

मैं TLS कनेक्शन के साथ काम नहीं किया है, लेकिन सादे सॉकेट के लिए आप, कनेक्शन URL में मिलीसेकेंड में एक स्पष्ट समय समाप्ति निर्दिष्ट कर सकते हैं एक appender के माध्यम से: "; connectiontimeout = 60000"

इसके अलावा, आप की संभावना की आवश्यकता होगी सॉकेट पर कुछ प्रकार के पिंग तंत्र को जोड़ने के लिए, अन्यथा इंटरमीडिएट राउटर अंततः कनेक्शन को बंद कर देंगे, यहां तक ​​कि जीवित रहने के साथ भी।

+0

जांच की गई - एक ही परिणाम। मैंने पहले ही नेटवर्क पर कई स्थानों पर 'कनेक्शनटाइमआउट' पैरामीटर देखा है, लेकिन 'कनेक्टर' क्लास एपीआई दस्तावेज में इसका कोई उल्लेख नहीं है। क्या यह गैर गैर टीएलएस कनेक्शन के लिए आपके लिए काम करता है? – mrvincenzo

+0

@MrVincenzo यूआरएल पैरामीटर बहुत बुरी तरह से प्रलेखित हैं, आपको बीबी फोरम पोस्ट और ओपन सोर्स कोड में कई मिलेंगे जो किसी भी आधिकारिक दस्तावेज़ीकरण में कहीं भी दिखाई नहीं देते हैं, इसलिए इसे आपको बंद न करने दें। जो भी आप पा सकते हैं उसके साथ कुछ परीक्षण और त्रुटि संभवतः आवश्यक होगी। – roryf

संबंधित मुद्दे