2012-05-22 11 views
8

मैं एक WCF स्वयं के द्वारा होस्ट सेवा, जिसके लिए मैं दो बुनियादी सुरक्षा आवश्यकताओं है के रूप में यह इंटरनेट पर पहुँचा दिया जाएगा विकसित किया है:क्या परिवहन WithMessage प्रमाण पत्र के बिना प्रमाण पत्र एक डब्ल्यूसीएफ सेवा के लिए पर्याप्त सुरक्षित है?

  • परिवहन परत छेड़छाड़ और सूँघने, विशेष रूप से प्रमाणीकरण की बहाली रोकने चाहिए साख। यह एसएसएल करता है, लेकिन मैंने जो कुछ देखा है, उससे एसएसएल को स्थापित करने के लिए प्रमाण पत्र की स्थापना की आवश्यकता है (शायद this hack के माध्यम से जो सादे प्रमाणपत्र फाइलों का उपयोग करता है), जिसे मैं करना नहीं चाहता हूं।

  • प्रमाणीकरण परत में उपयोगकर्ता नाम/पासवर्ड सत्यापनकर्ता होना चाहिए।

मैं उपयोग करने के लिए मेरी सेवा के लिए कॉन्फ़िगर:

 <security mode="TransportWithMessageCredential"> 
     <message clientCredentialType="UserName" /> 
     <transport clientCredentialType="Basic" /> 
     </security> 

यहां तक ​​कि अगर परिवहन परत http (https) है, इस WCF एक अन्य सुरक्षा परत है कि एसएसएल के बराबर है बनाने करता है? यदि नहीं, तो सुरक्षा शक्ति के मामले में क्या अंतर है?

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

<?xml version="1.0"?> 
<configuration> 
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup> 
    <system.serviceModel> 
    <services> 
     <service name="MyService"> 
     <host> 
      <baseAddresses> 
      <add baseAddress = "http://localhost:8000/Services" /> 
      </baseAddresses> 
     </host> 
     <endpoint address ="MyService" binding="wsHttpBinding" contract="IMyService"> 
      <identity> 
      <dns value="localhost"/> 
      </identity> 
     </endpoint> 
     <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/> 
     </service> 
    </services> 
    <bindings> 
     <wsHttpBinding> 
     <binding name="Binding1" maxReceivedMessageSize="2147483647"> 
      <security mode="TransportWithMessageCredential"> 
      <message clientCredentialType="UserName" /> 
      <transport clientCredentialType="Basic" /> 
      </security> 
     </binding> 
     </wsHttpBinding> 
    </bindings> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior> 
      <serviceMetadata httpGetEnabled="True"/> 
      <serviceCredentials> 
      <userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="CR.Common.Services.CustomValidator, Common" /> 
      </serviceCredentials> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    </system.serviceModel> 
</configuration> 

धन्यवाद:

यहाँ स्वयं के द्वारा होस्ट सेवा के लिए अपना पूरा विन्यास कोड है!

उत्तर

10

डिफ़ॉल्ट रूप से, सभी सुरक्षित डब्ल्यूसीएफ बाइंडिंग (जैसे wsHttp बाइंडिंग) संदेशों को एन्क्रिप्ट और साइन करेगा।

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

WSHttp बाइंडिंग के साथ आप एसएसएल से बच सकते हैं और संदेश स्तर पर सुरक्षा डाल सकते हैं।

मैं दृढ़ता से आप this article, विशेष रूप से सेवा साख और बातचीत अध्याय को पढ़ने के लिए सलाह दें:

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

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

आप प्रमाणपत्र के बारे में इतना चिंतित क्यों हैं?

+0

मैं संभवतः प्रमाण पत्र के बिना एक सरल स्थापना चाहूंगा यदि संभव हो तो। कुछ ऐसा जहां सर्वर को कस्टम उपयोगकर्ता नाम/पासवर्ड (कोई विंडोज प्रमाणीकरण) की आवश्यकता होगी और फिर संचार गोपनीयता और अखंडता की गारंटी होगी। –

+3

जैसा कि मैंने आपको बताया था, आपको संदेश पर हस्ताक्षर करने और एन्क्रिप्ट करने के लिए "कुछ" चाहिए, यही कारण है कि आप UserNamePasswordValidator को प्रमाणपत्र की आवश्यकता है। आपको कुछ हैक मिल सकता है जो इसे प्रमाण पत्र के बिना काम करता है, लेकिन फिर आपका संदेश हस्ताक्षरित/एन्क्रिप्टेड नहीं होगा। प्रमाण पत्र स्थापित करना काफी आसान है, और आप प्रमाण पत्र स्वत: हस्ताक्षरित (सर्वर पर जेनरेट किए गए) का भी उपयोग कर सकते हैं, इसलिए इससे आपको कुछ पैसे नहीं मिलते हैं। – Fabske

+1

मैं केवल एक सर्वर प्रमाण पत्र का उपयोग कर समाप्त हुआ, हालांकि मुझे अभी भी विश्वास है कि इसे मेरे जैसे दृश्यों के लिए आसान बनाया जा सकता है। –

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