2010-06-11 37 views
3

WCF自定义证书验证我有托管在IIS 6 WCF应用程序需要与basicHttpBinding的

  1. 拥有2路SSL认证
  2. 验证客户端证书的内容与一些客户端主机信息
  3. 验证客户端证书由有效的subCA颁发。

我能够做到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> 

+0

我正在经历类似的事情。在一个环境中它可以工作,但在另一个BIG-IP负载平衡环境中,它会忽略Validate方法。 – lox 2011-09-01 08:51:27

回答

0

您也可以尝试重写与证书验证此ServerCertificateValidationCallback

我们以这样的方式使用它与WCF HttpBinding:

System.Net.ServicePointManager.ServerCertificateValidationCallback = 
    (sender, certificate, chain, policyErrors) => 
    { 
     var isValid = false; 
     // some checking logic 
     return isValid; 
    }; 
相关问题