HttpListener केवल लोकलहोस्ट के लिए SSL का समर्थन करता है?

प्रोग्रामिंग


नमस्ते,

मुझे लगता है कि बहुत से लोग जानते हैं और उपयोग करते हैं Httpश्रोता[^] कक्षा।

जहाँ तक मैं MSDN पर नोट से देख सकता हूँ यह https ट्रैफ़िक का समर्थन करता है:

If you create an HttpListener using https, you must select a Server Certificate for that listener. Otherwise, an HttpWebRequest query of this HttpListener will fail with an unexpected close of the connection.

मैंने लोकलस्टोरेज में ट्रस्टेड में रूट सर्टिफिकेट जोड़ा और लोकलस्टोरेज में पर्सनल में एक और सर्टिफिकेट जोड़ा, जो रूट सर्टिफिकेट द्वारा हस्ताक्षरित था:

ROOT
makecert.exe -sr localmachine -ss MY -a sha1 -n "CN=Root,O=DO_NOT_TRUST,OU=test purposes" -sky signature -pe -r "Root.cer" -sv "RootKey.pvk"

Personal
makecert.exe -sr localmachine -ss MY -a sha1 -n "CN=*.codeproject.com,O=DO_NOT_TRUST,OU=test purposes" -sky exchange -pe -ir localmachine  -iv "RootKey.pvk" -ic "Root.cer"

मैंने प्रमाणपत्र को इस प्रकार पोर्ट से जोड़ा:

netsh http add sslcert ipport=0.0.0.0:8081 certhash="{hash}" appid={guid}

और सब कुछ काम करता है लेकिन केवल लोकलहोस्ट पर मौजूद साइटों के लिए। जब मैं उदाहरण के लिए https://codeproject.com खोलने का प्रयास करता हूं। HttpListener “नहीं सुनता” अनुरोध। ब्राउज़र वेब पेज खोलने का प्रयास करता है और टाइमआउट के साथ विफल हो जाता है।

वैसे, मुझे पता है कि इसे मैन-इन-द-मिडिल अटैक कहा जाता है लेकिन यह केवल परीक्षण उद्देश्यों के लिए है और दुर्भाग्य से मैं फ़िडलर का उपयोग नहीं कर सकता जो इस तकनीक का भी उपयोग करता है।

परंपरा के अनुसार मेरा प्रश्न सरल नहीं है, मेरा मानना ​​है कि यहां कोई “मुफ़्त रेटिंग” नहीं है दोस्तों, क्षमा करें 🙂 लेकिन यदि आप मेरी मदद करने में सक्षम हैं तो यह बहुत अच्छा होगा।

एक और नोट – मैंने इसके बारे में लगभग सभी लेख और लोकलहोस्ट के सभी उदाहरण पढ़े हैं। इसलिए यदि आप मुझे किसी लेख का लिंक प्रदान करने जा रहे हैं तो कृपया जांच लें कि यह उदाहरण लोकलहोस्ट के लिए भी हो सकता है;)

और एक और – हो सकता है कि आपका सुझाव TcpListner या ऐसा कुछ उपयोग करने का हो। फ़िलहाल मैं तर्क नहीं बदलना चाहता, मैं तर्क बदलूँगा यदि यह एकमात्र समाधान है।

बहुत-बहुत धन्यवाद। तिमुर.

समाधान 1

अद्भुत! 50 से अधिक बार देखा गया और कोई उत्तर नहीं, हमेशा की तरह 🙂 हमेशा की तरह, स्वयं ही उत्तर दे रहा हूँ।

HttpListener, TCPListener की तुलना में अधिक उच्च-स्तरीय वर्ग है। बेशक इसका मतलब यह है कि HttpListener के साथ काम करना आसान है लेकिन! इसका मतलब यह भी है कि कार्यक्षमता का अभाव है। मेरा मतलब है कि आप HTTPListener के साथ गंभीर प्रॉक्सी नहीं बना सकते।

जैसा कि हम सुरक्षित सॉकेट (एसएसएल) के साथ काम करना जानते हैं, हमें एसएसएल हैंडशेक (कनेक्ट विधि इत्यादि) बनाने की आवश्यकता है। लेकिन HttpListener के लिए इसे सर्टिफिकेट बाइंडिंग (netsh http add sslcert) के माध्यम से किया जाना चाहिए। मैं बस इतना कह सकता हूं कि मैंने सब कुछ करने की कोशिश की और रिमोट होस्ट के लिए यह काम नहीं कर सका, केवल लोकलहोस्ट के लिए। मैं कारण नहीं जानता, क्षमा करें।
इसके अलावा, यह प्रमाणपत्र बोली प्रॉक्सी के संदर्भ में उपयोग करने के लिए आरामदायक नहीं है। यदि मैं तुरंत सही सीएन विषय के साथ प्रमाणपत्र बनाना चाहूँ तो क्या होगा?

इस सब ने मुझे टीसीपीलिस्टनर का उपयोग करने और कनेक्ट विधियों को संभालने के लिए अपने एप्लिकेशन को फिर से लिखने के लिए मजबूर किया।

निम्नलिखित लेख से मुझे मूल बातें समझने में मदद मिली:
C# में मल्टीथ्रेडेड HTTP/HTTPS डिबगिंग प्रॉक्सी सर्वर को कार्यान्वित करना[^]

समाधान 6

उत्तर के लिए कभी देर नहीं होती?

लोकलहोस्ट के अलावा किसी अन्य चीज़ के लिए HttpListener का उपयोग करने का प्रयास करते समय यूआरएल आरक्षण की आवश्यकता होती है। इसके लिए सिंटैक्स इस प्रकार है:

netsh http add urlacl url=http://<hostName>:<port>/ user=<user>

जहां : आपके HttpListener के लिए अंतिम बिंदु है, और उपयोगकर्ता आईडी या उपयोगकर्ता-समूह नाम है जिसके तहत यूआरएल आरक्षण रिकॉर्ड किया जाएगा।

निम्नलिखित सिंटैक्स के साथ आरक्षण हटाएँ:

netsh http delete urlacl url=http://<hostName>:<port>/

コメント

タイトルとURLをコピーしました