2012-06-03 14 views
5

क्या नेटसीसीपी बाइंडिंग के साथ डब्ल्यूसीएफ एसएसएल का उपयोग करने का कोई तरीका है जिसे क्लाइंट मशीन पर क्लाइंट प्रमाणपत्र स्थापित करने की आवश्यकता नहीं होगी? (एसएसएल वी 2 अगर मुझे गलत नहीं है)।क्लाइंट सर्टिफिकेट के बिना टीसीपी पर डब्ल्यूसीएफ एसएसएल प्रमाण पत्र का उपयोग (केवल सर्वर पक्ष)

हम चाहते हैं कि सर्वर प्रमाणपत्र ग्राहक के विश्वसनीय स्टोर में प्रमाणीकरण के लिए होगा और सर्वर की सार्वजनिक कुंजी द्वारा अपना संदेश एन्क्रिप्ट कर रहा है, जिसका अर्थ है कि केवल सर्वर मशीन एक निजी कुंजी प्रमाणपत्र रखेगी।

हम नेटटीसीपी बाइंडिंग का उपयोग कर रहे हैं और दोनों पक्षों पर कस्टम बाइंडिंग नहीं कर रहे हैं। यदि यह किया जा सकता है, तो इसके लिए सही कॉन्फ़िगरेशन क्या है? (क्लाइंट & सर्वर कॉन्फ़िगरेशन पर)

अग्रिम धन्यवाद।


यहां मेरे डब्ल्यूसीएफ कॉन्फिग हैं।

सर्वर Config:



    <configuration> 
     <system.serviceModel> 
     <bindings> 
     <netTcpBinding> 
      <binding name="TcpSecureBinding"> 
      <security mode="Transport"> 
       <transport clientCredentialType="Certificate"/>    
      </security> 
     </binding> 
     </netTcpBinding> 
     </bindings> 
     <behaviors> 
     <serviceBehaviors> 
      <behavior name="ServiceCredentialsBehavior">   
      <serviceDebug includeExceptionDetailInFaults="True" /> 
      <serviceMetadata httpGetEnabled="true" /> 
      <serviceAuthorization 
       principalPermissionMode="UseWindowsGroups"> 
      </serviceAuthorization> 
      <serviceCredentials> 
       <windowsAuthentication includeWindowsGruops="true"    
             allowAnonymousLogons="false"/> 
       <clientCertificate> 
        <authentication certificateValidationMode="none"/> 
       </clientCertificate> 
       <serverCertificate 
        findValue="thumbprint" 
        storelocation="LocalMachine" 
        x509FindType="FindMyThumbprint" 
        storeName="My"/> 
      </serviceCredentials> 
     </behavior> 
     </serviceBehaviors> 
     </behaviors> 
    <services> 
     <service behaviorConfiguration="ServiceCredentialsBehavior" 
       name="ServiceModel.Calculator"> 
      <endpoint address="net.tcp://localhost:8040/Calculator" 
        binding="netTcpBinding" 
        bindingConfiguration="TcpSecureBinding" 
        contract="ServiceModel.ICalculator" > 
      <identity> 
       <dns value="localhost"/> 
      </identity> 
     </endpoint> 
     </service> 
    </services> 
    </system.serviceModel> 
    </configuration> 

ग्राहक कॉन्फ़िग:



    <configuration> 
     <system.serviceModel> 
     <client> 
     <endpoint address="net.tcp://localhost:8040/Calculator" 
       behaviorConfiguration="endpointCredentialBehavior" 
       binding="netTcpBinding" 
       bindingConfiguration="Binding1" 
       contract="ServiceModel.ICalculator"> 
      <identity> 
       <dns value="localhost"/> 
      </identity> 
      </endpoint> 
     </client> 
     <behaviors> 
     <endpointBehaviors> 
      <behavior name="endpointCredentialBehavior"> 
      </behavior> 
     </endpointBehaviors> 
     </behaviors> 
     <bindings> 
     <netTcpBinding> 
      <binding name="Binding1"> 
      <security mode="Transport"> 
       <transport clientCredentialType="Windows" /> 
      </security> 
      </binding> 
      </netTcpBinding> 
     </bindings> 
    </system.serviceModel> 
    </configuration> 

im मेरे वर्तमान सर्वर & ग्राहक कॉन्फ़िगरेशन जोड़ने। एक और सवाल:

  1. प्रमाणीकरण स्तर पर हम ग्राहक वहाँ सर्वर के प्रमाणपत्र को प्रमाणित करने के (मुझे लगता है कि सर्वर की सार्वजनिक कुंजी trustedPeople दुकान में होना चाहिए), यह संभव है करना चाहते हैं?

  2. क्या आप हमें परिवहन सुरक्षा या संदेश का उपयोग करने की सलाह देते हैं?

  3. अगर हम NTLM (clientCredentialType = विंडोज़) द्वारा ग्राहक & सर्वर प्रमाणीकरण करना चाहते हैं यह सर्वर का प्रमाणपत्र प्रमाणीकरण के अलावा किया जा सकता है या सिर्फ उन में से एक लागू किया जा सकता है? अब तक, हमने एनटीएलएम प्रमाणीकरण का उपयोग किया है।

  4. अभी हो रही अपवाद im: "का अनुरोध किया उन्नयन द्वारा समर्थित नहीं है 'net.tcp: // servername: 8040/**' (उदाहरण के सुरक्षा के लिए पर सक्षम इस बेमेल बाइंडिंग की वजह से हो सकता है। क्लाइंट और सर्वर पर नहीं)। " मुझे यह त्रुटि हुई है क्योंकि ग्राहक ओम सर्टिफिकेट, में विंडोज सुरक्षा और सर्वर का उपयोग कर रहा है, लेकिन जब मैं प्रमाणपत्र में क्लाइंट सुरक्षा बदल रहा हूं, तो मुझे त्रुटि मिल रही है: "क्लाइंट प्रमाणपत्र प्रदान नहीं किया गया है"। लेकिन मैं ग्राहक के प्रमाण पत्र को सेट नहीं करना चाहता हूं और यह मेरी मुख्य समस्या का हिस्सा है।

  5. हम पढ़ा है कि हम इस टैग सर्वर का प्रमाणपत्र सत्यापन के लिए प्रयोग कर सकते हैं:

    
        <identity> 
         <certificate encodedValue="encoded certificate"/> 
        </identity> 
    

लेकिन, मैं पहचान करके इस प्रमाणीकरण एक इनकोडिंग प्रमाण पत्र द्वारा किया जाता है जब हम preffer लगता है कि प्रमाणपत्र की पहचान करेंगे क्लाइंट के स्टोर (विश्वसनीय लोगों) में सर्वर की सार्वजनिक कुंजी खोजकर प्रदर्शन किया जाए। क्या यह जानकारी वास्तव में सच है? पहचान का यह टैग ग्राहक में "एस भरोसेमंद दुकान सार्वजनिक कुंजी खोज करने के लिए वैकल्पिक यह आप netTcpBiding का उपयोग करने और उपयोग करने की आवश्यकता कर रहे हैं रहे हैं?

आशा है कि आप इस शिष्टाचार में, धन्यवाद फिर से सहायता करने में सक्षम हो जाएगा।

+0

यह संभव है। अब तक तुमने क्या प्रयास किये हैं? – Bernard

+0

आपको क्लाइंट प्रमाण पत्र की आवश्यकता नहीं है जबतक कि आप विशेष रूप से एक के लिए नहीं पूछते; आपकी बाध्यकारी कॉन्फ़िगरेशन कैसा दिखता है? –

+0

क्या कोई मेरी समस्या के साथ मेरी सहायता कर सकता है ?? – AmirT

उत्तर

11

परिवहन सुरक्षा के बाद आपके पास 3 विकल्प हैं, पहले विकल्प को सेवा प्रमाण पत्र की आवश्यकता होती है, दूसरे को कोई प्रमाण नहीं चाहिए, तीसरे को सेवा परिदृश्य और क्लाइंट प्रमाण दोनों की आवश्यकता होती है। आपके परिदृश्य के लिए, आपको विकल्प 1 का उपयोग करना चाहिए जो सेवा के प्रमाण के माध्यम से सेवा को प्रमाणित करेगा और संदेशों के लिए गोपनीयता और ईमानदारी का अभ्यास करेगा।

सी >> गोपनीयता
मैं >> वफ़ादारी
एक >> प्रमाणीकरण नहीं (यह ग्राहक के लिए क्या होगा)

1- विकल्प एक प्रदान करते हैं (सी + मैं) कोई प्रमाणीकरण, ग्राहक के लिए क्या होगा इस मामले में टीसीपी एसएसएल (HTPS एसएसएल) सी और मैं, प्रदान करने के लिए इस्तेमाल किया जाएगा और सेवा

<!--//Below are the configuration for both the service and the client--> 
<netTcpBinding> 
    <binding name="TcpSecureBinding"> 
     <security mode="Transport"> 
     <transport clientCredentialType="None"></transport> 
     </security> 
    </binding> 
    </netTcpBinding> 

भी होगा, क्योंकि टीसीपी एसएसएल तो उपयोग किया जाएगा सेवा, ग्राहक के लिए एक प्रमाण पत्र प्रदान करनी चाहिए, ताकि आप की जरूरत है सर्वर में प्रमाण पत्र स्थापित करें और सेवा को प्रमाणित करने के लिए इस प्रमाणपत्र का उपयोग करने के लिए सेवा को कॉन्फ़िगर करें, आपको भी सर्वर के लिए रूट प्रमाणपत्र प्राधिकरण प्रमाणपत्र स्थापित करने की आवश्यकता है क्लाइंट मशीन (आमतौर पर LocalMachine/विश्वसनीय रूट प्रमाणीकरण प्राधिकारी में) पर उपाध्यक्ष प्रमाण पत्र, और सेवा सेवा

<serviceBehaviors> 
    <behavior> 
     <serviceCredentials> 
     <serviceCertificate findValue="localhost" 
          x509FindType="FindByIssuerName" /> 
     </serviceCredentials> 
    </behavior> 
    </serviceBehaviors> 

2- विकल्प दो प्रदान करते हैं (ए + [सी के लिए प्रमाण पत्र निर्दिष्ट करने के लिए नीचे दिए गए व्यवहार की आवश्यकता है + I]), सी और मैं वैकल्पिक हैं क्योंकि आप सुरक्षा लेवल तत्व के माध्यम से कॉन्फ़िगर करते हैं। ग्राहक प्रमाणन खिड़कियों प्रमाणन हो जाएगा

<!--//Below are the configuration for both the service and the client--> 
<netTcpBinding> 
    <binding name="TcpSecureBinding"> 
     <security mode="Transport"> 
     <transport clientCredentialType="Windows" protectionLevel="EncryptAndSign"></transport> 
     </security> 
    </binding> 
    </netTcpBinding> 

3- विकल्प 3 प्रदान करते हैं (आमतौर पर ए, सी और मैं प्राप्त करने के लिए विंडोज स्ट्रीम सुरक्षा का उपयोग करेगा) (ए + सी + मैं), सी और मैं वैकल्पिक नहीं हैं और क्लाइंट प्रमाणीकरण क्लाइंट प्रमाणपत्र के माध्यम से किया जाएगा (प्रत्येक ग्राहक अपना स्वयं का प्रमाणपत्र होना आवश्यक है), इस मामले में टीसीपी एसएसएल (नहीं HTPS एसएसएल) ए, सी प्रदान करने के लिए इस्तेमाल किया जाएगा और मैं

<!--//Below are the configuration for both the service and the client--> 
<binding name="TcpSecureBinding"> 
     <security mode="Transport"> 
     <transport clientCredentialType="Certificate"></transport> 
     </security> 
    </binding> 

भी क्योंकि टीसीपी एसएसएल का उपयोग किया जाएगा तो सेवा को क्लाइंट के लिए प्रमाणपत्र प्रदान करना होगा, इसलिए आपको सर्वर में प्रमाणपत्र स्थापित करना होगा और सेवा का उपयोग करने के लिए कॉन्फ़िगर करना होगा यह प्रमाण पत्र इसकी पहचान साबित करने के लिए, आपको क्लाइंट मशीन पर सेवा प्रमाणपत्र के लिए रूट प्रमाणपत्र प्राधिकरण प्रमाणपत्र स्थापित करना होगा (आमतौर पर लोकमाचिन/विश्वसनीय रूट प्रमाणन प्राधिकरणों में), और सेवा को प्रमाण पत्र निर्दिष्ट करने के लिए निम्न व्यवहार करने की आवश्यकता है सेवा के लिए

<serviceBehaviors> 
    <behavior> 
     <serviceCredentials> 
     <serviceCertificate findValue="localhost" 
          x509FindType="FindByIssuerName" /> 
     </serviceCredentials> 
    </behavior> 
    </serviceBehaviors> 
+0

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

+0

[रयान गुन के ब्लॉग] से जवाब (https://talkdotnet.wordpress.com/tag/nettcp/) – noobob

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