Пользовательский X509CertificateValidator не запускается, если сертификат клиента не представлен в доверенных сертификатах сервера - PullRequest
0 голосов
/ 16 апреля 2019

У меня есть пользовательский X509CertificateValidator, настроенный в службе WCF.Когда клиент подключается к сервису, а на сервере есть сертификат клиента как доверенный, вызывается мой пользовательский X509CertificateValidator.В пользовательском валидаторе он будет проверять сертификат.

Однако, если клиент пытается аутентифицироваться с помощью сертификата, которому сервер не доверяет, мой пользовательский валидатор не вызывается, и доступ запрещается.Выполняется ли что-то еще до моего пользовательского валидатора, который проверяет сертификат?

  1. Я хочу, чтобы мой валидатор был вызван, даже если сервер не видел сертификат раньше.
  2. Если исключениегенерируется из моего пользовательского валидатора, или если мой валидатор не вызывается (предположительно, потому что сертификат клиента не является доверенным), клиент получает исключение, указывающее «HTTP-запрос был запрещен с помощью схемы аутентификации клиента« Anonymous ».»} System.Exception{System.ServiceModel.Security.MessageSecurityException} ". Но я не делаю анонимную аутентификацию. Почему это так?

web.config:

<binding name="certBasicHttpBindingConfig" allowCookies="true" maxReceivedMessageSize="2147483647" maxBufferPoolSize="2147483647">
    <security mode="Transport">
        <transport clientCredentialType="Certificate" />
    </security>
</binding>


<behavior name="ClientCertAuthBehavior">    
  <serviceMetadata httpGetEnabled="True" httpsGetEnabled="True" />
  <serviceDebug includeExceptionDetailInFaults="true" />
  <serviceCredentials>
    <clientCertificate>
      <authentication certificateValidationMode="Custom" customCertificateValidatorType="MyApp.WebServices.CertificateValidators.MyClientCertificateValidatorWithAuditing, MyApp.WebServices" />
    </clientCertificate>
  </serviceCredentials>

</behavior>     
...