У меня есть приложение WCF, размещенное на IIS 6, которому нужно
- Наличие двухсторонней аутентификации SSL
- Проверка содержимого сертификата клиента с некоторой информацией о хосте клиента
- Подтверждение сертификата клиента выдано действующей 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>