WCF + аутентификация клиента по сертификату - PullRequest
4 голосов
/ 24 февраля 2012

Я использую службу WCF, которая должна принимать только клиентов, которые могут аутентифицировать себя с помощью сертификата клиента ssl. В качестве режима безопасности я использую транспортную безопасность. Требуется, чтобы процесс аутентификации выполнялся PeerTrust. К сожалению, безопасность транспорта не совместима с PeerTrust - это означает, что ChainTrust всегда является предпочтительным методом. В этом случае каждому клиенту доверяют, у которого есть сертификат, подписанный CA, который хранится в моем «Trusted CA Store». Это не то поведение, которое мне нужно.

Я пытался исправить это с помощью специального сертификата-валидатора. Это похоже на работу. Я получаю обратный вызов с сертификатом, и я, вероятно, могу проверить, доверяю ли я сертификату или нет.

Моя проблема в том, что я не уверен в состоянии, когда сертификат предоставляется методу validate в пользовательском валидаторе. SSL обычно проверяет, предоставляя клиенту сертификат, если у клиента есть соответствующий закрытый ключ. Другими словами, моя проблема в том, что я не уверен, что клиент, с которым я разговариваю, - это тот клиент, которым, как мне кажется, он и является.

<serviceBehaviour>
    <behavior name="sslbehaviour">
      <serviceMetadata httpsGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="true"/>
      <serviceThrottling maxConcurrentSessions="2000000000" maxConcurrentCalls="2000000000" maxConcurrentInstances="2000000000"/>
      <serviceCredentials>
        <clientCertificate>
          <authentication certificateValidationMode="Custom" customCertificateValidatorType="Package.MyX509CertificateValidator, server"/>
        </clientCertificate>
      </serviceCredentials>
    </behavior>
    </serviceBehaviors>

Приветствуются и другие подходы для проверки клиента PeerTrust.

С уважением, Майкл

...