2015-01-14 10 views
8

मेरे पास एक वेब एपीआई है जिसे कुछ अलग सेवाओं के साथ संवाद करना होगा। वर्तमान में, मैं वेब एपीआई निम्न सुरक्षा प्रोटोकॉल का उपयोग करने के लिए सेट है:प्रति अनुरोध सुरक्षा प्रोटोकॉल बदलना (एचटीपी क्लाइंट)

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

जब एपीआई HttpClient के माध्यम से एक और सेवा के लिए बाहर कॉल (ट्विटर जैसी कहते हैं), यह है कि प्रोटोकॉल का प्रयोग करेंगे। उसी समय, क्लाउड से कुछ एक्सेस करने के लिए एक और अनुरोध आ सकता है, जो किसी भी कारण से, वर्तमान में टीएलएस (टीएलएस 1.2 नहीं) की आवश्यकता है। बादल के लिए अनुरोध, बाहर फायरिंग से पहले, सेट फिर से सुरक्षा प्रोटोकॉल:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;

समस्या मैं में चल रहा हूँ जब दो अलग अलग और अनूठा अनुरोध में आते हैं, बादल के लिए ट्विटर के लिए एक और एक है , सुरक्षा प्रोटोकॉल भेजने से पहले "गलत एक" पर स्विच कर सकता है, जिससे अनुरोध विफल हो जाता है।

वहाँ इतना है कि मैंने कहीं कुछ सिंगलटन में एक सेटिंग के आसपास गमागमन नहीं कर रहा हूँ अनुरोध के अनुसार HttpClient पर सुरक्षा प्रोटोकॉल सेट करने के लिए कोई तरीका है?

+1

इस पर आने वाले किसी भी व्यक्ति के लिए और अभी भी अटक गया है, मैंने अजीब सर्वर के अनुरोधों को अलग करने के लिए ऐपडॉमेन का उपयोग करने का निर्णय लिया, प्रति अनुरोध सुरक्षा प्रोटोकॉल स्विच को सक्षम करने के लिए। http://www.superstarcoders.com/blogs/posts/executing-code-in-a-separate-plication-domain-using-c-sharp.aspx – Porschiey

उत्तर

3

ऐसा करने का कोई तरीका नहीं है। SecurityProtocol संपत्ति केवल एक ही स्थान पर आंतरिक TlsStream वर्ग के अंदर किया जा रहा है:

enter image description here

TlsStream ऐसे HTTP, FTP और एसएमटीपी के रूप में सभी आंतरिक TLS कनेक्शन वापस करने के लिए लगता है।

मुझे आशा थी कि ServicePoint आपको इसे कॉन्फ़िगर करने की अनुमति देता है। कई सेटिंग्स के लिए ServicePointManager केवल डिफ़ॉल्ट प्रदान करता है। वह आशा निराधार थी।

तो यह काफी मजबूत सबूत है कि यह संभव नहीं है। हालांकि, यह कोई सबूत नहीं है।

आपको क्या करना चाहिए? मैं उस अजीब सर्वर के लिए HTTP क्लाइंट लाइब्रेरी को स्विच करूँगा जिसके साथ आप बात कर रहे हैं। HTTP एक विशेष रूप से जटिल प्रोटोकॉल नहीं है। मुझे यकीन है कि कुछ अन्य कार्यान्वयन उपलब्ध है।

वैकल्पिक रूप से, एक प्रॉक्सी का उपयोग करें जो आपके सर्वर पर HTTPS कनेक्शन को समाप्त करता है। .NET तब केवल HTTP से संबंधित है।

+0

इस पर ध्यान देने के लिए धन्यवाद। दुर्भाग्यवश अजीब सर्वर कनेक्शन (क्लाउड) एसडीके में बेक किया गया है, और मेरे पास उपयोग की जाने वाली पद्धति तक पहुंच भी नहीं है, अकेले ही यह जान लें कि क्या इसका 'एचटीपी क्लाइंट' यह फिर से काम करने के लिए बहुत काम करेगा मेरे सभी अन्य कनेक्शन एक अलग क्लाइंट का उपयोग करने के लिए - और मैं HttpClient का उपयोग करना पसंद करता हूं ... उसने कहा, मैं इस उत्तर की सराहना करता हूं, यह बहुत उपयोगी है! :) – Porschiey

3

आपको इसे बदलने की आवश्यकता नहीं है। आप उपयोग कर सकते

ServicePointManager.SecurityProtocol | = SecurityProtocolType.Tls12;

+0

अद्भुत, पेपैल के साथ मेरी समस्याओं का हल :) –

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