#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 гарантирует, что передача защищена при использовании учетных данных имени пользователя. »