2009-10-27 13 views
17

मैं एक डब्ल्यूसीएफ एप्लीकेशन बना रहा हूं जहां मैं क्लाइंट और सर्वर के बीच संचार को एन्क्रिप्ट करने के लिए प्रमाणपत्र का उपयोग करूँगा। मेरे विकास के माहौल में, मैं एक टेस्ट सर्टिफिकेट/स्वयं हस्ताक्षरित प्रमाणपत्र का उपयोग करना चाहता हूं जिसे मैंने मेकर्ट का उपयोग करके बनाया है। (केवल सर्वर के पास प्रमाणपत्र होगा, क्लाइंट नहीं होगा)।डब्ल्यूसीएफ पहचान जांच विफलता पर शिकायत क्यों करता है?

मैंने प्रमाणपत्र को एक प्रमाणपत्र स्टोर में स्थापित किया है, और सब कुछ ठीक काम कर रहा है। क्लाइंट पर, प्रमाणपत्र ValidationMode वर्तमान में "झूठी" पर सेट है, क्योंकि मैं एक परीक्षण प्रमाण पत्र के साथ काम कर रहा हूं।

मेरे समस्या:

<endpoint ... > 
    <identity> 
     <dns value="<Name-Of-Server-Computer>"/> 
    </identity> 
</endpoint> 

अगर मैं पहचान तत्व निकाल, मैं निम्न त्रुटि संदेश मिलता है:

ग्राहक पर app.config में, मैं इस के रूप में पहचान तत्व निर्दिष्ट करने की आवश्यकता क्लाइंट में जब मैं सर्वर से कनेक्ट करने का प्रयास करता हूं:

पहचान जांच आउटगोइंग संदेश के लिए विफल रही। रिमोट एंडपॉइंट की अपेक्षित DNS पहचान 'लोकलहोस्ट' थी लेकिन रिमोट एंडपॉइंट ने DNS का दावा 'नाम-ऑफ-सर्वर-कंप्यूटर' प्रदान किया था। यदि यह एक वैध रिमोट एंडपॉइंट है, तो आप चैनल प्रॉक्सी बनाते समय एंडपॉइंट एड्रेस की पहचान संपत्ति के रूप में DNS पहचान 'नाम-ऑफ-सर्वर-कंप्यूटर' को स्पष्ट रूप से निर्दिष्ट करके समस्या को ठीक कर सकते हैं।

  • पहचान ही किया जब एक परीक्षण/स्व-हस्ताक्षरित प्रमाणपत्र का उपयोग कर की जांच करें:

तो यहाँ मेरे सवालों का है? जब मैं एक सीए से खरीदे गए वास्तविक, भरोसेमंद, प्रमाण पत्र का उपयोग करके अपना आवेदन तैनात करता हूं, तो पहचान जांच अभी भी की जाएगी?

  • क्या पहचान जांच को अक्षम करने का कोई तरीका है? मुझे पता है कि मैं अपना खुद का कस्टम सर्टिफिकेट सत्यापनकर्ता बना सकता हूं, लेकिन इनका उपयोग करके पहचान जांच को ओवरराइड करने का कोई तरीका नहीं लगता है।

  • उत्तर

    10

    चेक हमेशा किया जाता है - और होना चाहिए। असल में, डब्ल्यूसीएफ जांच करेगा कि प्रमाण पत्र डोमेन नाम (yourcompany.com) या मशीन नाम पर जारी किया गया है जहां आपकी सेवा मौजूद है। यह एक सुरक्षा जांच है जिसे मैं कभी अक्षम नहीं करूँगा! अन्यथा, आपकी सेवा को धोखा देने वाला कोई भी व्यक्ति मनमाने ढंग से डोमेन/मशीन नाम के लिए किए गए किसी प्रमाण पत्र का उपयोग कर सकता है और अपना ट्रैफिक प्राप्त कर सकता है - जो आप चाहते हैं!

    तो आपको यह सुनिश्चित करने की आवश्यकता है कि उत्पादन सर्वर पर आपका वास्तविक प्रमाणपत्र वास्तव में उस डोमेन नाम पर जारी किया गया है कि उत्पादन सर्वर का हिस्सा होगा, उदा। यदि आपका उत्पादन सर्वर "production.yourcompany.com" में होगा, तो प्रमाण पत्र उस डोमेन पर किए जाने की आवश्यकता है।

    मार्क

    +0

    > "यह एक सुरक्षा जांच है जिसे मैं कभी अक्षम नहीं करूँगा!" बस यह सुनिश्चित करने के लिए कि मैं समझता हूं। क्या इसका मतलब यह है कि वास्तव में इसे अक्षम करने का एक तरीका है? मैं चेक के लाभों को समझता हूं ... – Nitramk

    +1

    मैंने कभी ऐसा करने के बारे में सोचा नहीं है, इसलिए मैंने यह जांचने का आग्रह कभी नहीं किया कि इसे बंद करने का कोई तरीका है या नहीं। मुझे नहीं पता, क्षमा करें। –

    24

    इस प्रश्न का उत्तर त्रुटि संदेश में ही है। ग्राहक पर आप कर सकते हैं:

    EndpointIdentity identity = EndpointIdentity.CreateDnsIdentity("Server"); 
    EndpointAddress address = new EndpointAddress(new Uri("net.tcp://1.2.3.4:12345/ServiceName"), identity); 
    

    जो कुछ भी अपेक्षित है, "सर्वर" को बदलें। आम तौर पर यह आपके स्वयं के हस्ताक्षरित प्रमाणपत्र का आम नाम (सीएन) होगा। ऐसा करने से सुरक्षा बर्बाद नहीं होगी, बशर्ते आप यह सुनिश्चित करने के लिए सभी ज़िम्मेदारी लें कि प्रस्तुत प्रमाण पत्र मान्य है, जो आपका कस्टम प्रमाणपत्र सत्यापनकर्ता बना रहा है और वहां प्रासंगिक जांच कर रहा है।

    +0

    आप सही हैं! यह जवाब सही है। –

    3

    प्रमाणपत्र वैलिडेशन मोड को "कोई नहीं" पर सेट किया जाना चाहिए, न कि "झूठी" ...