2016-10-24 26 views
17

का उपयोग कर एक टीसीपी सर्वर से कनेक्ट करना मैं किसी डिवाइस को .NET (4.5.2) सर्वर से कनेक्ट करने के लिए कोई भाग्य नहीं ले रहा हूं। यह डिवाइस द्वारा खोला गया एक टीसीपी कनेक्शन है, जो टीएलएस 1.2 का उपयोग करता है।किसी क्लाइंट को टीएलएस 1.2

  • सर्वर साइड पर, मैं एक टीसीपी सर्वर का एक मानक नेट कार्यान्वयन है: SslStream के माध्यम से DotNetty
  • मैं डिवाइस पर कुछ भी नहीं बदल सकते लिपटे

किसी भी नेट ग्राहक सफलतापूर्वक कनेक्ट कर सकते हैं एक सुरक्षित टीएलएस कनेक्शन का उपयोग कर मेरे सर्वर पर। यह कर्ल के साथ भी प्रयास करते समय काम कर रहा है, इसलिए मैंने निष्कर्ष निकाला है कि मेरा टीसीपी सर्वर ठीक काम करता है।

तो मैंने तुलना की है कि वायरसहार्क का उपयोग करके) एक काम करने वाले क्लाइंट द्वारा जो भेजा गया था उससे कनेक्ट किया गया था जो कनेक्ट नहीं हो सकता है। क्लाइंट हैलो टीएलएस संदेश के अंदर Server Name Extension (SNI) की अनुपस्थिति (डिवाइस के लिए) में पाया गया महत्वपूर्ण अंतर है।

अगला बात मैंने कोशिश की मैन्युअल रूप से अपने सर्वर Pcap.Net उपयोग करते हुए, यानी डेटा भेजने के लिए मैन्युअल रूप से कच्चे बाइट सरणियों का उपयोग कर (कच्चे डेटा मैं कोशिश कर रहा (डिवाइस से Wireshark करने के लिए धन्यवाद) मिला टीसीपी SYN/टीसीपी एसीके/ग्राहक हैलो संदेश भेजने के लिए है मेरे सर्वर से कनेक्ट करने के लिए)। मैंने पुष्टि की कि सर्वर नाम एक्सटेंशन जोड़कर गैर-काम करने वाले क्लाइंट हैलो कच्चे बाइट सरणी को ट्वीव करने से मेरा टीएलएस हैंडशेक काम करने का कारण बनता है।

तो जाहिर है कि मुझे उन ग्राहकों के साथ कोई समस्या है जिसमें एसएनआई एक्सटेंशन और एक सर्वर शामिल नहीं है जो हैंडशेक से इनकार करते हैं यदि यह जानकारी मौजूद नहीं है।

मैं अपना टीसीपी सर्वर उस क्लाइंट को स्वीकार करने का तरीका कैसे बदल सकता हूं जो सर्वर नाम एक्सटेंशन प्रदान नहीं करता है? मानक .NET SslStream कक्षा का उपयोग कर पहले स्थान पर यह संभव है?

AFAIK, SNI विस्तार अनिवार्य नहीं है, और यह है या नहीं, इसका इस्तेमाल करने का फैसला करने के लिए ग्राहक पर निर्भर है, इसलिए सर्वर सैद्धांतिक रूप से एक क्लाइंट संदेश इसके बिना स्वीकार करना चाहिए नमस्कार।

किसी भी सूचक की बहुत सराहना की जाएगी।

+0

मुझे डर है कि नेट इस पर कोई नियंत्रण नहीं है हूँ - 'SslStream' SChannel के लिए सिर्फ एक कामयाब आवरण है और हमेशा ऊपर नहीं है तारीख तक। क्या आपने प्रमाण पत्र सत्यापन कॉलबैक के साथ गड़बड़ करने का प्रयास किया है? क्या क्लाइंट हैलो आपको ठीक लग रहा है? क्या आप इसे काम करने के लिए इसे और नीचे काट सकते हैं? – Luaan

+0

एक तरफ के रूप में आपके ग्राहक डिवाइस * किसी * TLS1.2 कनेक्शन स्थापित कर सकते हैं? जैसे एक ब्राउज़र के माध्यम से किसी दिए गए https वेबसाइट पर? – wal

+0

यदि आपको पूरी तरह से यह काम करना चाहिए तो आप SSLStream के एक अलग कार्यान्वयन पर विचार कर सकते हैं जैसे कि https://www.eldos.com/sbb/desc-ssl-spec.php (मैं केवल पहले विकल्प का समर्थन नहीं कर रहा हूं) मिला) – wal

उत्तर

1

नेट 4.5.2 TLS1.2 का समर्थन करता है लेकिन यह डिफ़ॉल्ट रूप से अक्षम है।

इसे सक्षम करने के लिए आपको सुरक्षा प्रोटोकॉल सेट को स्पष्ट रूप से परिभाषित करना होगा।

System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls; 

के लिए अधिक जानकारी दिए गए लिंक को देखने के https://msdn.microsoft.com/en-us/library/system.net.servicepointmanager.securityprotocol%28v=vs.110%29.aspx

+0

उत्सुक अगर एपीआई कॉल के भीतर ऐसा करना संभव है। – brendo234

+0

@ brendo234 मुझे समझ में नहीं आता कि आपका क्या मतलब है। System.Net.ServicePointManager.SecurityProtocol एक एपीआई कॉल है। – cristallo

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