2010-06-11 1 views
3

У меня есть приложение WCF, размещенного на IIS 6, который долженWCF проверки пользовательских сертификатов с BasicHttpBinding

  1. Есть 2-полосная аутентификации SSL
  2. Проверка содержимого сертификата клиента с некоторыми хоста клиента информации
  3. Проверка клиента сертификат выдается действительной подкатегорией.

Я был в состоянии сделать 1) успешно. Я пытаюсь достичь 2) и 3), следуя this - в основном создавая класс, который наследует X509CertificateValidator и переопределяет метод Validate с моей собственной реализацией валидации (шаги 2 и 3). Однако я следовал инструкциям MSDN, но похоже, что метод Validate не вызывается. Я намеренно бросаю исключение SecurityAccessDeniedException в переопределенном методе Validate, и никакое исключение не возникает при попытке доступа к службе через мой браузер. Я все еще могу получить доступ к моему сайту с любым сертификатом клиента.

Я также читал 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 Load Balanced он игнорирует метод Validate. – lox

ответ

0

Вы также можете попытаться отменить проверку сертификатов с этим ServerCertificateValidationCallback

Мы используем его с WCF HttpBinding таким образом:

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