2011-02-12 11 views
8

यह एक बेवकूफ सवाल हो सकता है लेकिन मुझे जवाब नहीं मिल रहा है।डब्ल्यूसीएफ क्लाइंट में एक स्व-हस्ताक्षरित SSL प्रमाणपत्र कैसे स्वीकार करें?

मैं क्या करना चाहता हूं: मेरे पास आईआईएस द्वारा होस्ट की गई डब्ल्यूसीएफ सेवा है। यह पूरी तरह से काम कर रहा है, मैं wsdl तक पहुंच सकता हूं, मेरे पास सर्वर के लिए एक स्व-हस्ताक्षरित प्रमाणपत्र है। मैं इस सेवा को एक WPF क्लाइंट से कॉल करना चाहता हूं।

समस्या यह है, के बाद से मैं एक स्व-हस्ताक्षरित प्रमाणपत्र है, मैं जब सेवा को फोन निम्नलिखित अपवाद: अधिकार 'स्थानीय होस्ट' के साथ SSL/TLS सुरक्षित चैनल के लिए विश्वास संबंध स्थापित नहीं कर सका।

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

मैं प्रमाणीकरण प्रक्रिया को पूरी तरह से बंद नहीं करना चाहता, मैं बस उपयोगकर्ताओं को इस चेतावनी को अनदेखा करने का विकल्प देना चाहता हूं (ब्राउज़र के रूप में)।

क्या कोई इस के लिए कुछ कोड प्रदान कर सकता है? यदि आप इसके बारे में एक अच्छा, विस्तृत ट्यूटोरियल में भाग गए, तो यह भी शानदार होगा। (देखें, मैंने पाया है कि ट्यूटोरियल के साथ मेरी समस्या विवरण की कमी है)

+0

को कम से कम उपयोगी उत्तर से उठाया मैं डिफ़ॉल्ट पर भरोसा से संबंधित नहीं स्व-हस्ताक्षरित प्रमाण पत्र के साथ समस्या को प्रतिबिंबित करने के सवाल बदल रूट प्रमाण पत्र। –

उत्तर

6

आप प्रमाण पत्र स्वयं पंजीकृत कर सकते हैं। यदि क्लाइंट में प्रमाणपत्र भी लोड करें, और फिर इसे विश्वसनीय के रूप में पंजीकृत करें तो आपको वह चेतावनी नहीं मिलनी चाहिए।

आपको X509CertificateCollection खोजने और उस संग्रह में प्रमाणपत्र जोड़ने की आवश्यकता है। एसएसएल पर चल रहे एक SmtpClient के साथ मुझे इस तरह की समस्या थी।

System.Net.ServicePointManager.ServerCertificateValidationCallback को हुक करके या System.Net.ICertificatePolicy को लागू करके और अपने स्वयं के स्थापित प्रमाण पत्र को वैध/भरोसेमंद (System.Net.ServicePointManager.CertificatePolicy से जुड़ा हुआ) की पहचान करें।

यह प्रति डब्लूसीएफ सामान नहीं है, लेकिन जो मैं कह सकता हूं उससे, इसे डब्ल्यूसीएफ में भी अनुवाद करना चाहिए। यह सब निर्भर करता है कि हुड के तहत डब्ल्यूसीएफ का क्या उपयोग होता है।

+1

क्या आप कृपया यह निर्दिष्ट कर सकते हैं कि यह सामान कहां लिखना है? इंटरफेस इत्यादि को किस वर्ग को लागू करना चाहिए? मैं डब्ल्यूसीएफ के इस तरफ बिल्कुल नया हूं, मैंने कभी भी सुरक्षित कनेक्शन या आईआईएस का उपयोग नहीं किया है, इसलिए मैं अभी भी थोड़ा खो गया हूं ... – Tenshiko

+0

यदि आप 'System.Net.ServicePointManager.ServerCertificateValidationCallback' को हुक करते हैं तो क्या आपको अनुरोध मिलता है प्रमाणपत्र प्रमाणित करने के लिए? –

+1

इसके लिए एक गैर-कोड दृष्टिकोण आपके देव मशीन और परीक्षण पर्यावरण पर प्रमाण पत्र पर भरोसा करना होगा। जैसा कि यहां बताया गया है http://stackoverflow.com/a/11296429/178620 –

12

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

ServicePointManager.ServerCertificateValidationCallback += 
      new System.Net.Security.RemoteCertificateValidationCallback(EasyCertCheck); 

वापस कॉल:

bool EasyCertCheck(object sender, X509Certificate cert, 
     X509Chain chain, System.Net.Security.SslPolicyErrors error) 
{ 
    return true; 
} 

कोड बेशर्म Is it possible to force the WCF test client to accept a self-signed certificate?

+0

भाषा का सही उपयोग :) –

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