我在我的WCF服务(.Net Framework 4.0)中使用basicHttpBinding,消息安全性和x509证书。配置如下所示:
<?xml version="1.0"?>
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.0" />
</system.web>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="ServiceBehavior">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true"/>
<serviceCredentials>
<serviceCertificate findValue="MyWebSite" storeLocation="LocalMachine"
storeName="My" x509FindType="FindBySubjectName" />
<userNameAuthentication userNamePasswordValidationMode="Custom"
customUserNamePasswordValidatorType="CToSave.ValidateClient, CToSave" />
</serviceCredentials>
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true"/>
<standardEndpoints>
<webScriptEndpoint>
<standardEndpoint crossDomainScriptAccessEnabled="True"/>
</webScriptEndpoint>
</standardEndpoints>
<services>
<service behaviorConfiguration="ServiceBehavior" name="CToSave.MyService">
<endpoint address="" binding="basicHttpBinding" contract="CToSave.IMyService" bindingConfiguration="BindingConfig"/>
</service>
</services>
<bindings>
<basicHttpBinding>
<binding name="BindingConfig" openTimeout="00:50:00" sendTimeout="00:50:00" receiveTimeout="00:50:00" closeTimeout="00:50:00" maxReceivedMessageSize="2147483647">
<security mode="Message">
<message clientCredentialType="Certificate"/>
</security>
</binding>
</basicHttpBinding>
</bindings>
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>
</configuration>
PHP客户端将使用此服务。为了消费它,客户端是否需要证书?我希望客户端不必生成证书。
如果clinet必须获得证书,我的配置会改变吗?如果是,我将做出哪些改变?
我已经阅读了几十篇关于basihttpbinding + security的文章,但没有一篇关于客户端证书的内容。请帮忙。
答案 0 :(得分:1)
是的,客户需要证书,因为:
<security mode="Message">
<message clientCredentialType="Certificate"/>
</security>
通常,客户端不会生成自己的证书,而是从协议提供者处获取证书(可以是组织中的证书颁发机构或公共机构或服务所有者)。
在任何情况下,您都需要一个良好的PHP WS-Security库,因为您需要生成WCF期望的消息格式(这是消息级安全性)。
答案 1 :(得分:0)