Самостоятельная служба WCF с взаимным SSL (между службой и клиентом) завершается с 403 Запрещено

Я пытаюсь настроить демонстрацию Mutual SSL междурезидентных Служба WCF и клиентское приложение (пока командная строка). В конце концов я пытаюсь найти решение, где у меня естьтранспортная безопасность (не безопасность сообщений) между сервером, который использует сертификат для своих входящих подключений, и несколькими клиентами, каждый из которых имеет отдельные сертификаты, которые я могу использовать для уникальной идентификации каждого из клиентов.

Я попробовал несколько разных подходов к этому, но ни один из них не сработал (я не смог найти точный пример того, что я пытался сделать). Каждый раз, когда я думаю, что я сближаюсь, я получаю исключение в клиенте, когда пытаюсь вызвать службу. Наиболее распространенное исключение, с которым я столкнулся:

“The HTTP request was forbidden with client authentication scheme 'Anonymous'.”
Inner exception: "The remote server returned an error: (403) Forbidden."

У кого-нибудь есть мысли о том, что я мог сделать неправильно или, возможно, лучше узнать, как настроить взаимный SSL в вышеуказанном сценарии?

Полное раскрытие информации - на данный момент я использую и клиент, и сервер на одном компьютере. Не уверен, что это имеет значение.

Конфигурационные фрагменты ниже

Код сервиса и клиента относительно тривиален, поэтому я уверен, что заставил их работать. Конфиги приложения (в частности, привязки и поведение) и сертификаты «более интересны», поэтому я не уверен в этом.

Как я создал сертификаты (дословные команды)

makecert -pe -n "CN=SelfSignedCA" -ss Root -sr LocalMachine  -a sha1 -sky signature -r -sv "SelfSignedCA.cer" "SelfSignedCA.pvk"
makecert -pe -n "CN=system" -ss my -sr LocalMachine -a sha1 -sky exchange -eku 1.3.6.1.5.5.7.3.1  -in "SelfSignedCA" -is Root -ir LocalMachine -sp "Microsoft RSA SChannel Cryptographic Provider" -sy 12 Service.cer
makecert -pe -n "CN=client1" -ss my -sr LocalMachine -a sha1 -sky exchange -eku 1.3.6.1.5.5.7.3.1  -in "SelfSignedCA" -is Root -ir LocalMachine -sp "Microsoft RSA SChannel Cryptographic Provider" -sy 12 Client1.cer

Связывание сертификата с портом (дословные команды)

netsh http add urlacl url=https://+:44355/MyService/ user=EVERYONE

Настройки сервера

Наручники:

  <wsHttpBinding>
    <binding name="CustomBinding">      
      <security mode="Transport">
        <transport clientCredentialType="Certificate"/>
      </security>
    </binding>
  </wsHttpBinding>

поведения:

    <serviceBehaviors>
      <behavior name="">
      <!--
      <serviceCredentials>
        <serviceCertificate
           findValue="system"
           storeLocation="LocalMachine"
           storeName="My"
           x509FindType="FindBySubjectName"/>
      </serviceCredentials>
      -->
      <serviceAuthorization
         serviceAuthorizationManagerType=
              "ClientAuthorization.ClientCertificateAuthorizationManager, Simulator.Service.SideA" />
    </behavior>
  </serviceBehaviors>

клиент

Наручники:

  <wsHttpBinding>
    <binding name="CustomBinding">      
      <security mode="Transport">
        <transport clientCredentialType="Certificate"/>
      </security>
    </binding>
  </wsHttpBinding>

поведения

  <endpointBehaviors>
    <behavior name="ChannelManagerBehavior">
      <clientCredentials>
         <clientCertificate findValue="client1"
                           storeLocation="LocalMachine"
                           storeName="My"
                           x509FindType="FindBySubjectName" />
        <!--
        <serviceCertificate>
          <authentication certificateValidationMode="PeerOrChainTrust"/>
        </serviceCertificate>
        -->
      </clientCredentials>
     </behavior>
  </endpointBehaviors>

ОБНОВИТЬ

Поэтому я добавил на сервер пользовательский валидатор имени пользователя и пароля, пытаясь переопределить поведение по умолчанию и всегда разрешать независимо от представленных учетных данных (опять же, я действительно не хочу проверять логин / пароль).Этот валидатор никогда не вызывается. Клиент по-прежнему получает исключение «Анонимная схема аутентификации».

Обновление поведения службы

  <serviceCredentials>
    <userNameAuthentication 
      userNamePasswordValidationMode="Custom"
      customUserNamePasswordValidatorType=
        "Service.ClientAuthorization.ClientUserNamePasswordValidatorManager, Service.SideA" />
  </serviceCredentials>

Ответы на вопрос(4)

Ваш ответ на вопрос