2009-10-13 15 views
12

मैं अपनी डब्ल्यूसीएफ सेवा में क्लाइंट प्रमाण पत्र देखना चाहता हूं।डब्ल्यूसीएफ सेवा में कस्टम प्रमाणपत्र सत्यापन

मेरा लक्ष्य केवल ग्राहकों को विशिष्ट थंबप्रिंट के साथ प्रमाण पत्र के साथ मेरी सेवा के साथ संवाद करने में सक्षम होना है।

आईआईएस में मेरी डब्ल्यूसीएफ सेवा की मेजबानी की जाती है, मैं मूलभूत एचटीपी बाइंडिंग और सुरक्षा मोड = "परिवहन" का उपयोग कर प्रमाण पत्र प्रकार "प्रमाणपत्र" के साथ कर रहा हूं। आईआईएस को सेवा के साथ संचार के लिए क्लाइंट प्रमाण पत्र की आवश्यकता है।

सहायता के लिए अग्रिम धन्यवाद।

अद्यतन: मेरे विन्यास:

<basicHttpBinding> 
<binding 
      name="testBinding" 
     maxReceivedMessageSize="2147483647"> 
     <readerQuotas 
        maxDepth="2147483647" 
       maxStringContentLength="2147483647" 
       maxArrayLength="2147483647" 
       maxBytesPerRead="2147483647" 
       maxNameTableCharCount="2147483647" /> 
<security mode="Transport"> 
       <transport clientCredentialType="Certificate"/> 
      </security> 

</binding> 
</basicHttpBinding> 

व्यवहार:

<serviceBehaviors> 
    <behavior name="SomeServiceBehavior"> 
     <serviceMetadata httpsGetEnabled="true" /> 
     <serviceDebug includeExceptionDetailInFaults="true" /> 
     <serviceCredentials> 
     <clientCertificate> 
      <authentication certificateValidationMode="Custom" customCertificateValidatorType="SomeService.CustomCertificateValidator,SomeService" /> 
     </clientCertificate> 
     </serviceCredentials>   
    </behavior> 
    </serviceBehaviors> 

सेवा विन्यास:

<service 
       behaviorConfiguration="SomeServiceBehavior" 
       name="SomeService"> 
     <endpoint 
        address="" 
        binding="basicHttpBinding" 
        bindingConfiguration="testBinding" 
        contract="ISomeService"> 
     </endpoint> 
     </service> 

और परीक्षण उद्देश्य के लिए मैं इस तरह से सत्यापनकर्ता कार्यान्वित:

public class CustomCertificateValidator : X509CertificateValidator 
    { 
     public override void Validate(System.Security.Cryptography.X509Certificates.X509Certificate2 certificate) 
     {     
      throw new SecurityTokenValidationException("TEST Certificate was not issued by a trusted issuer TEST"); 
     } 
    } 

और यह काम नहीं करता है। मैं किसी भी वैध प्रमाणपत्र के साथ अपनी सेवा से कनेक्ट कर सकता हूं।

उत्तर

14

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

प्रमाण पत्र ValidationMode को कस्टम पर सेट करें और कॉन्फ़िगरेशन फ़ाइल के क्लाइंट प्रमाणपत्र सेवा व्यवहार अनुभाग में अपना सत्यापनकर्ता निर्दिष्ट करें।

How to: Create a Service that Employs a Custom Certificate Validator

+2

मैंने क्लाइंट प्रमाणपत्र में कस्टम सत्यापनकर्ता जोड़ने की कोशिश की लेकिन यह काम नहीं करता है। ऐसा लगता है कि यह क्लाइंट प्रमाण पत्र को सत्यापित करने के लिए डिज़ाइन किया गया है कि सेवा डुप्लेक्स मोड में उपयोग की जाएगी। मुझे आने वाले प्रमाण पत्र (क्लाइंट भेजने वाला प्रमाण पत्र) सत्यापित करने की आवश्यकता है। क्या आपने इस परिदृश्य में इस विकल्प का प्रयास किया है? – empi

+1

यह क्लाइंट या सेवा पक्ष पर काम कर सकता है और आने वाले संदेश प्रमाण पत्र को सत्यापित करने के लिए उपयोग किया जाता है। – Maurice

+0

सुनिश्चित करें कि आप इसे सेवा में क्लाइंट को सत्यापित करने के लिए में जोड़ दें जो आप चाहते हैं। केवल सेवा को सत्यापित करने के लिए क्लाइंट पर उपयोग किया जाता है। – Maurice

7

मुझे नहीं लगता कि वहाँ 'परिवहन सुरक्षा' के साथ 'कस्टम प्रमाणपत्र सत्यापन' के लिए वैसे भी है। यह केवल 'संदेश सुरक्षा' के साथ काम करता है।

+0

सच नहीं है। मेरे पास ट्रांसपोर्ट मोड में चल रहे कस्टम सर्टिफिकेट सत्यापन हैं – Jeremy

1

हाँ, आप सुरक्षा सेट के साथ बुनियादी एचटीपी बाइंडिंग का उपयोग कर सकते हैं और आपको आईआईएस में सर्विसहोस्ट सृजन में हुक करने की आवश्यकता है - Custom Service Host देखें। यदि आप सत्यापन मानदंडों की सूची को परिभाषित करने के लिए कस्टम कॉन्फ़िगरेशन अनुभाग बनाते हैं तो आपको थंबप्रिंट मान, प्रमाणपत्र या किसी अन्य डेटा को सत्यापित करने में सक्षम होना चाहिए।

उपरोक्त सभी के कार्यान्वयन के लिए नमूना कोड this CodeProject artticle से कोड डाउनलोड में उपलब्ध है।

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