Проверка пользовательских сертификатов WCF с помощью BasicHttpBinding - PullRequest
3 голосов
/ 11 июня 2010

У меня есть приложение WCF, размещенное на IIS 6, которому нужно

  1. Наличие двухсторонней аутентификации SSL
  2. Проверка содержимого сертификата клиента с некоторой информацией о хосте клиента
  3. Подтверждение сертификата клиента выдано действующей subCA.

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

Я также прочитал эту ветку , но это не очень помогло. Любая помощь будет принята с благодарностью!

Вот моя конфигурация:

<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>

1 Ответ

0 голосов
/ 12 мая 2012

Вы также можете попытаться переопределить проверку сертификата с помощью этого ServerCertificateValidationCallback

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

System.Net.ServicePointManager.ServerCertificateValidationCallback = 
     (sender, certificate, chain, policyErrors) => 
     {
        var isValid = false;
        // some checking logic
        return isValid;
     };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...