2010-06-16 14 views
6

आत्म नहीं है - WCF सर्वर (नहीं आईआईएस) की मेजबानी की और प्रमाण पत्र (विन XP पर) जनरेट किया गया था कमांड लाइन का उपयोग करस्व - मेजबानी की WCF सर्वर और एसएसएल

makecert.exe -sr CurrentUser -ss My -a sha1 -n CN=SecureClient -sky exchange -pe 
makecert.exe -sr CurrentUser -ss My -a sha1 -n CN=SecureServer -sky exchange -pe 

यह प्रमाणपत्र की तरह सर्वर से जोड़ दिया गया इस तरह कोड:

serviceCred.ServiceCertificate.SetCertificate(StoreLocation.LocalMachine, 
          StoreName.My, X509FindType.FindBySubjectName, "SecureServer"); 



serviceCred.ClientCertificate.SetCertificate(StoreLocation.LocalMachine, 
          StoreName.My, X509FindType.FindBySubjectName, "SecureClient"); 

पिछले सभी ऑपरेशन के बाद मैंने सर्वर से SSL कनेक्शन की जांच करने के लिए सरल क्लाइंट बनाया।

क्लाइंट कॉन्फ़िगरेशन:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <system.serviceModel> 
     <bindings> 
      <basicHttpBinding> 
       <binding name="BasicHttpBinding_IAdminContract" closeTimeout="00:01:00" 
        openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" 
        allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" 
        maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536" 
        messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" 
        useDefaultWebProxy="true"> 
        <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" 
         maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
        <security mode="TransportCredentialOnly"> 
         <transport clientCredentialType="Basic"/> 
        </security> 
       </binding> 
      </basicHttpBinding> 
     </bindings> 
     <client> 
      <endpoint address="https://myhost:8002/Admin" binding="basicHttpBinding" 
       bindingConfiguration="BasicHttpBinding_IAdminContract" contract="Admin.IAdminContract" 
       name="BasicHttpBinding_IAdminContract" /> 
     </client> 
    </system.serviceModel> 
</configuration> 

कोड:

Admin.AdminContractClient client = new AdminContractClient("BasicHttpBinding_IAdminContract"); 
      client.ClientCredentials.UserName.UserName = "user"; 
      client.ClientCredentials.UserName.Password = "pass"; 
      var result = client.ExecuteMethod() 

निष्पादन के दौरान मैं अगले त्रुटि प्राप्त:

The provided URI scheme 'https' is invalid; expected 'http'.\r\nParameter name: via 

प्रश्न: कैसे स्वयं के द्वारा होस्ट सर्वर के लिए SSL सक्षम करने के लिए और जहां क्या मुझे क्लाइंट और सर्वर के लिए प्रमाण पत्र सेट अप करना चाहिए? धन्यवाद।

उत्तर

7

कोशिश परिवर्तन

<security mode="TransportCredentialOnly"> 

<security mode="Transport"> 

करने के लिए और हमें पता है कि अगर किसी भी सुधार करता है करते हैं। इससे आपके क्लाइंट को HTTPS कनेक्शन की अनुमति मिलनी चाहिए।

+0

इस परिवर्तन के बाद मुझे प्राप्त हुआ: HTTP अनुरोध http: // myhost: 8002/Admin पर HTTP अनुरोध करते समय एक त्रुटि हुई। यह इस तथ्य के कारण हो सकता है कि HTTP प्रमाणपत्र HTTPS मामले में HTTP.SYS के साथ ठीक से कॉन्फ़िगर नहीं किया गया है। यह क्लाइंट और सर्वर के बीच सुरक्षा बाध्यकारी के मेल के कारण भी हो सकता है। – jitm

+0

क्या आप अपने सर्वर की servicemodel config –

+0

के साथ पोस्ट अपडेट कर सकते हैं, मैं [कोडप्लेक्स पर डब्ल्यूसीएफ सुरक्षा मार्गदर्शन] (http://wcfsecurityguidance.codeplex.com/) को देखना सुनिश्चित करूँगा। विशेष रूप से, [यह पृष्ठ प्रमाण पत्र प्रमाणीकरण की बात करता है] (http://wcfsecurity.codeplex.com/wikipage?title=How%20To%20-%20Use%20Certificate%20 प्रमाणीकरण%20and%20Message%20Security%20in%20WCF%20calling % 20from% 20Windows% 20Forms और referringTitle = कैसे% 20Tos)। –

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