सी # में क्लाइंट प्रमाणीकरण के लिए अस्थायी रूप से SSL क्लाइंट कुंजी लोड करें #

मैं WebBrowser नियंत्रण का उपयोग कर C# एप में WebInterface जोड़ने के लिए कर रहा हूं। मेरी इच्छा यह सत्यापित करना है कि केवल ऐसा ऐप एसएसएल क्लाइंट प्रमाणपत्रों का उपयोग करके हमारे वेब सर्वर से कनेक्ट करने में सक्षम है।

मेरा विचार ऐप में क्लाइंट प्रमाणपत्र को एम्बेड करना था और मेरे ऐप के माध्यम से कनेक्ट करते समय बस उपयोग करना था। किसी को भी यह कैसे करना है इस पर कोई परेशानी है? या इसे काम करने का एकमात्र तरीका X509Store में कुंजी लोड करना है।

अगर मैं इसे X509Store में डालता हूं, तो क्या यह मेरी कुंजी सामान्य इंटरनेट एक्सप्लोरर उपयोग के लिए उपलब्ध कराएगा?

0

3 उत्तर

क्या आप वाकई यही करना चाहते हैं? यदि आप अपने आवेदन में निजी कुंजी एम्बेड करते हैं (जैसे आपका दृष्टिकोण लागू होता है), तो हमलावर इसे निकाल सकता है और अपने नकली सॉफ़्टवेयर को प्रमाणित करने के लिए इसका उपयोग कर सकता है।

एक सर्वर क्लाइंट सॉफ्टवेयर प्रमाणीकृत नहीं कर सकता है। यह केवल परीक्षण कर सकता है कि क्या ग्राहक के पास कुछ रहस्य है या नहीं। जब आप अपने क्लाइंट में एक निजी कुंजी एम्बेड करते हैं और इसे वितरित करते हैं, तो यह अब एक रहस्य नहीं होगा।

मैं सॉफ़्टवेयर की बजाय अपने सॉफ़्टवेयर के उपयोगकर्ता को प्रमाणित करने की अनुशंसा करता हूं। आपको उपयोगकर्ताओं को अपना स्वयं का रहस्य उत्पन्न करने की ज़रूरत है, भले ही यह पासवर्ड या निजी कुंजी हो, और उन्हें बचाने के लिए उन्हें प्रोत्साहन दें।

0
जोड़ा

किसी भी WebBrowser का उपयोग करने के बजाय ऐप के उपयोगकर्ताओं तक पहुंच प्रतिबंधित करने के लिए कुंजी का उपयोग करने का इरादा उपयोगकर्ताओं को मान्य करने के लिए इतना नहीं है। यह सार्वजनिक इंटरनेट पर इंट्रानेट व्यवहार का प्रकार है।

यह एक गरीब आदमी का डीआरएम है। कुंजी निकालने वाले लोगों के कारण होने वाली हानि महत्वपूर्ण नहीं है। मुझे लगता है कि इस घटना का खतरा कम है और हम जो खो सकते हैं वह न्यूनतम है।

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

0
जोड़ा

तो, यहां कई विचार हैं:

1।

मैं 'एरिक्सन' से सहमत हूं, यह सत्यापित करते हुए कि केवल आपका ऐप ऐप के साथ संवाद कर सकता है, आपके वर्तमान डिज़ाइन के साथ लगभग असंभव है। किसी व्यक्ति को रिवर्स इंजीनियर का ऐप और उसके बाद खेल खत्म होने से पहले यह समय की बात है (यदि यह केवल सुरक्षा का ही रूप है)। यदि आप इसे अपने ऐप और वैध उपयोगकर्ता को सत्यापित करना चाहते हैं तो आपको उपयोगकर्ता को प्रमाणीकृत करने की आवश्यकता है और साथ ही ऐप के हस्ताक्षर की जांच करने की कुछ व्यवस्था (जो मुझे विश्वास नहीं है कि क्लाइंट-सर्वर मॉडल में संभव है। .. इसके बाद मैं हमेशा झूठ बोल सकता हूं और कह सकता हूं कि मेरे 'हैक्यौ' ऐप में आपके 'realapp' के समान हस्ताक्षर है और आप इसे सर्वर-साइड से सत्यापित नहीं कर सकते हैं)

2।

याद रखें WebBrowser नियंत्रण अनिवार्य रूप से IE के चारों ओर एक रैपर है, इसलिए कुछ चाल के बिना (जो मुझे एक सेकंड में मिल जाएगा) आपको उपयोगकर्ता स्टोर में प्रमाणपत्र जोड़ना होगा।

3।

आप जो पूछ रहे हैं उसे पूरा करने के लिए यहां एक हैकी तरीका है (भले ही इसका बुरा विचार हो):

  • पहले WebRequest.Create एक HttpWebRequest ऑब्जेक्ट बनाने के लिए
  • प्रोग्राम में एन्कोड किए गए फ़ाइल या बाइनरी स्ट्रीम से मैन्युअल रूप से X509Certificate2 ऑब्जेक्ट लोड करें
  • HttpWebRequest.ClientCertificates का उपयोग करें अपने प्रमाण को webrequest
  • में जोड़ने के लिए
  • अनुरोध भेजें, प्रतिक्रिया प्राप्त करें
  • WebBrowser के दस्तावेज़स्ट्रीम पर HttpWebResponse के ResponseStream को दबाकर WebBrowser को प्रतिक्रिया भेजें

इसका अनिवार्य रूप से मतलब है कि आपको सर्वर से और अनुरोधों को अनुरोध और प्रतिक्रियाओं को संभालने के लिए कुछ रैपर कक्षाएं लिखनी होंगी और HTML को देखने के लिए वेबब्रोसर का उपयोग कर रहे हैं।

हकीकत में, आपको फिर से डिजाइन करने की आवश्यकता है और उन खतरों को देखें जिन्हें आप संभालने का प्रयास कर रहे हैं!

0
जोड़ा