2010-06-11 24 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; 
    };