【发布时间】:2010-06-11 00:27:51
【问题描述】:
我有一个托管在 IIS 6 上的 WCF 应用程序,需要
- 具有 2 路 SSL 身份验证
- 使用一些客户端主机信息验证客户端证书内容
- 验证客户端证书由有效的子 CA 颁发。
我能够成功地做到 1)。我试图通过遵循this 来实现 2) 和 3) - 基本上创建一个继承 X509CertificateValidator 的类并用我自己的验证实现(步骤 2 和 3)覆盖 Validate 方法。我完全按照 MSDN 的说明进行操作,但似乎没有调用 Validate 方法。我故意在覆盖的 Validate 方法中抛出 SecurityAccessDeniedException ,当我尝试通过浏览器访问服务时没有抛出异常。我仍然可以使用任何客户端证书访问我的网站。
我也读过this thread,但它并没有真正帮助。任何帮助将不胜感激!
这是我的配置:
<system.serviceModel>
<services>
<service behaviorConfiguration="SimpleServiceBehavior"
name="SampleNameSpace.SampleClass">
<endpoint address=""
binding="basicHttpBinding"
bindingConfiguration="NewBinding0"
contract="SampleNameSpace.ISampleClass" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="SimpleServiceBehavior">
<serviceMetadata httpsGetEnabled="true" policyVersion="Default" />
<serviceCredentials>
<clientCertificate>
<authentication certificateValidationMode="Custom" customCertificateValidatorType="SampleNameSpace.MyX509CertificateValidator, SampleAssembly"/>
</clientCertificate>
</serviceCredentials>
</behavior>
</serviceBehaviors>
</behaviors>
<bindings>
<basicHttpBinding>
<binding name="NewBinding0">
<security mode="Transport">
<transport clientCredentialType="Certificate" />
</security>
</binding>
</basicHttpBinding>
</bindings>
【问题讨论】:
-
我正在经历类似的事情。在一个环境中它可以工作,但在另一个 BIG-IP 负载平衡环境中它会忽略 Validate 方法。
标签: c# .net wcf wcf-security