Базовый протокол WCF HttpBinding UserNamePasswordValidator x.509

#wcf #ssl #basichttpbinding

#wcf #ssl #базовая привязка httpbinding

Вопрос:

Я настроил службу WCF для клиента, используя wsHttpBinding с пользовательской проверкой имени пользователя, x.509, но БЕЗ SSL

Они используют PHP и полностью неспособны обойти защиту WS, поэтому нашим решением должно быть добавление другой базовой привязки httpbinding. Но когда я делаю это, кажется, что для этого требуется SSL. Мое требование — категорически не использовать SSL.

Моя wshttpbinding, которая работает, выглядит следующим образом:

 <wsHttpBinding>
    <binding name="WSHttpBinding_ISearchService" closeTimeout="00:10:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:10:00" bypassProxyOnLocal="true" transactionFlow="false" hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false">
      <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
      <reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="false" />
      <security mode="Message"  >
        <message clientCredentialType="UserName"/>
      </security>
    </binding>
  

 <serviceBehaviors>
    <behavior name="My.Services.SearchServiceBehavior">
      <serviceMetadata httpGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="true" />

      <dataContractSerializer maxItemsInObjectGraph="2147483647" />

      <serviceCredentials>
        <serviceCertificate findValue="01000000000xxxxxxxxx" storeLocation="LocalMachine"
                                 storeName="My" x509FindType="FindBySerialNumber" />
        <userNameAuthentication userNamePasswordValidationMode="Custom"
         customUserNamePasswordValidatorType="My.Services.UserNamePassValidator, SearchService" />
      </serviceCredentials>

    </behavior>
  </serviceBehaviors>
  

Возможна ли такая же точная конфигурация с использованием basichttpbinding без SSL?

Ответ №1:

Базовая привязка HttpBinding требует такой базовой привязки.Безопасность.Сообщение.Тип учетных данных clientCredentialType должен быть эквивалентен базовому типу учетных данных httpmessagecredentialtype.Certificate для режима безопасности «Сообщение». Итак, во-первых, вы не можете использовать clientCredentialType=»Имя пользователя».
Для шифрования сообщения и передачи у вас должен быть сертификат клиента. Образцы WCF SDK реализуют один из таких сценариев, проверьте здесь

Комментарии:

1. Могу ли я использовать имя пользователя auth, если сначала я настрою тип сертификата? Дело в том, что я хочу иметь возможность проверять подлинность нескольких клиентов на основе разных учетных данных. Что я должен делать, создавать разные сертификаты для каждого клиента?

2. Вот что MSDN говорит об авторизации имени пользователя: «Позволяет службе требовать, чтобы клиент проходил аутентификацию с использованием учетных данных имени пользователя. Обратите внимание, что WCF не допускает никаких криптографических операций с именами пользователей, таких как генерация подписи или шифрование данных. WCF гарантирует, что передача защищена при использовании учетных данных имени пользователя. »