2012-05-17 161 views
1

我試圖在IIS 7中使用SSL設置WCF web服務,並且我有點與配置文件丟失。 我希望從服務器到客戶端的數據出現亂碼(這對SSL是否足夠?) 客戶端還需要通過證書將自身標識到服務器。使用SSL和證書爲WCF設置配置文件

我已經制定了以下證書:

  • dev.test.com - 訪問的URL https://dev.test.com/TestService.svc表明,在這個地方的有效證書。
  • TESTSERVER - 標識服務器虛擬證書(我需要真的需要這或許我可以重用dev.test.com也許有server.test.com???)
  • TestClient的 - 在客戶端

,這是我的配置文件是如何建立一個假的認證:

Web.conf IG(服務器):

<bindings> 
    <wsHttpBinding> 
    <binding name="wsHttpEndpointBinding" 
      messageEncoding="Mtom"> 
     <security mode="Message"> 
     <transport clientCredentialType="None" /> 
     <message clientCredentialType="Certificate" /> 
     </security> 
    </binding> 
    </wsHttpBinding> 
</bindings> 

<services> 
    <service 
    name="TestService" 
    behaviorConfiguration="TestServiceBehavior"> 
    <endpoint 
     name="TestEndPoint" 
     address="" 
     binding="wsHttpBinding" 
     bindingConfiguration="wsHttpEndpointBinding" 
     bindingNamespace="http://www.example.com/" 
     contract="iWebService"> 
     <!--<identity> 
     <dns value=""/> 
     </identity>--> 
    </endpoint> 
    <endpoint address="mex" binding="mexHttpsBinding" bindingConfiguration="" name="MexHttpsBindingEndpoint" contract="IMetadataExchange"/> 
    </service> 
</services> 

<behaviors> 
    <serviceBehaviors> 
    <behavior name="TestServiceBehavior"> 
     <serviceMetadata httpGetEnabled="false" httpsGetEnabled="true" /> 
     <serviceCredentials> 
     <clientCertificate> 
      <authentication certificateValidationMode="PeerOrChainTrust" /> 
     </clientCertificate> 
     <serviceCertificate findValue="TestServer" storeLocation="LocalMachine" 
      storeName="My" x509FindType="FindBySubjectName" /> 
     </serviceCredentials> 
    </behavior> 
    </serviceBehaviors> 
</behaviors> 

<serviceHostingEnvironment multipleSiteBindingsEnabled="true" /> 

的App.config(客戶端):

<bindings> 
    <wsHttpBinding> 
    <binding name="wsHttpBinding" bypassProxyOnLocal="false" 
     transactionFlow="false" hostNameComparisonMode="StrongWildcard" 
     messageEncoding="Mtom" textEncoding="utf-8" useDefaultWebProxy="true" 
     allowCookies="false"> 
     <reliableSession ordered="true" 
     enabled="false" /> 
     <security mode="Message"> 
     <transport clientCredentialType="None" proxyCredentialType="None" 
      realm="" /> 
     <message clientCredentialType="Certificate" negotiateServiceCredential="true" 
      algorithmSuite="Default" /> 
     </security> 
    </binding> 
    <binding name="TestEndPoint" bypassProxyOnLocal="false" 
     transactionFlow="false" hostNameComparisonMode="StrongWildcard" 
     messageEncoding="Mtom" 
     textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false"> 
     <reliableSession ordered="true" 
     enabled="false" /> 
     <security mode="Transport"> 
     <transport clientCredentialType="None" proxyCredentialType="None" 
      realm="" /> 
     <message clientCredentialType="Certificate" negotiateServiceCredential="true" /> 
     </security> 
    </binding> 
    </wsHttpBinding> 
</bindings> 

<client> 
    <endpoint address="https://dev.test.com/TestService.svc" 
    behaviorConfiguration="TestServiceBehavior" 
    binding="wsHttpBinding" bindingConfiguration="wsHttpBinding" 
    contract="IContractName" name="wsHttpBinding"> 
    <identity> 
     <dns value="TestServer" /> 
    </identity> 
    </endpoint> 
    <endpoint address="https://dev.test.com/DistributionCenterService.svc" 
    binding="wsHttpBinding" bindingConfiguration="TestEndPoint" contract="IContract.Name" 
    name="TestEndPoint" /> 
</client> 

<behaviors> 
    <endpointBehaviors> 
    <behavior name="TestServiceBehavior"> 
     <clientCredentials> 
     <clientCertificate findValue="TestClient" 
          storeName="My" 
          storeLocation="CurrentUser" 
          x509FindType="FindBySubjectName"/> 
     <serviceCertificate> 
      <authentication 
      certificateValidationMode="PeerOrChainTrust" 
      revocationMode="NoCheck" 
      trustedStoreLocation="CurrentUser"/> 
     </serviceCertificate> 
     </clientCredentials> 
    </behavior> 
    </endpointBehaviors> 
</behaviors> 

當我嘗試訪問https://dev.test.com/TestService.svc,我得到
Could not find a base address that matches scheme http for the endpoint with binding WSHttpBinding. Registered base address schemes are [https].

無論如何,我真的失去了我應該使用的配置設置。

回答

1

我相信你能夠使用https,你的wsHttpBinding上的客戶端安全模式需要是Transport或者(可能在你的情況下)TransportWithMessageCredential。

+0

只爲客戶?服務器端怎麼樣? – kei

+0

也許在那裏 - 我專注於你得到的第一個錯誤:) –

+0

我明白了。讓我試試這個。 – kei