wcf中的服务证书和transportwithmessagecredentials

时间:2014-06-16 23:09:06

标签: wcf

我有一个WCF服务,我想使用我可以正确实现的客户端证书来验证。我的错误是正确保护数据,所以即使有人截获也无法解密它。服务运行在https上,我使用下面的服务部分中的web.config。客户端可以是任何本地工作进程或Web表单或任何东西。所以问题是以下设置正确的方式保护它。

在客户端,我将服务证书配置为clientChannelservice.ClientCredentials.ServiceCertificate.DefaultCertificate = GetServiceCertificate();,但即使我提供或未提供此服务证书也不会有所不同.Jo只是想知道我是否正确保护了我的服务因为当我将数据写入日志时,我看到返回值没有被编码并且被传输。这是因为它受SSL保护或者什么。如果有人可以清除我的困惑。

 <system.serviceModel>
    <diagnostics>
      <messageLogging logEntireMessage="true" logMalformedMessages="true"
        logMessagesAtServiceLevel="true" logMessagesAtTransportLevel="true" />
    </diagnostics>
    <services>
      <service behaviorConfiguration="customBehavior" name="CertProtectedWCF.Service1">
        <endpoint
          address="https://localhost:123/Service1.svc"
          binding="wsHttpBinding"
          bindingConfiguration="customWsHttpBinding"
          contract="CertProtectedWCF.IService1" />
      </service>
    </services>
    <bindings>
      <wsHttpBinding>
        <binding name="customWsHttpBinding">
          <security mode="TransportWithMessageCredential">           
            <message clientCredentialType="Certificate" negotiateServiceCredential="true" />
          </security>
        </binding>
      </wsHttpBinding>
    </bindings>
    <behaviors>
      <serviceBehaviors>
        <behavior name="customBehavior">         
          <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
            <serviceDebug includeExceptionDetailInFaults="false"/>
          <serviceCredentials>
            <clientCertificate>
              <authentication
                certificateValidationMode="PeerTrust"
                revocationMode="NoCheck" />
            </clientCertificate>
            <serviceCertificate
              findValue="ACS2SigningCertificate"
              x509FindType="FindBySubjectName"
              storeLocation="LocalMachine"
              storeName="My" />
          </serviceCredentials>
        </behavior>
      </serviceBehaviors>
    </behaviors>

    <protocolMapping>
      <add binding="basicHttpsBinding" scheme="https" />
    </protocolMapping>

    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="false" />
  </system.serviceModel>

1 个答案:

答案 0 :(得分:0)

客户端获取服务器证书作为SSL协议的一部分。使用自签名证书,客户端无法通过使用CA链来验证他们是否做了正确的事情。但它当然可以使用该证书解密...