我有一个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>
答案 0 :(得分:0)
客户端获取服务器证书作为SSL协议的一部分。使用自签名证书,客户端无法通过使用CA链来验证他们是否做了正确的事情。但它当然可以使用该证书解密...