2013-12-20 3 views
1

Я разрабатываю службу WCF, которая должна быть запущена на HTTPS с учетными данными UserName, и нашла следующую конфигурацию, работающую в моем тестовом решении, запущенном в IIS;Конфигурирование службы WCF с HTTPS

конфигурации сервера:

<?xml version="1.0"?> 
<configuration> 

    <system.web> 
    <compilation debug="true" targetFramework="4.5" /> 
    <httpRuntime targetFramework="4.5" /> 
    <customErrors mode="Off" /> 
    </system.web> 

    <system.serviceModel> 

    <behaviors> 
     <serviceBehaviors> 
     <behavior name="Behavior1"> 
      <serviceMetadata httpsGetEnabled="true" /> 
      <serviceDebug includeExceptionDetailInFaults="false" /> 
      <serviceCredentials> 
      <userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="Service.UserNamePassValidator, Service" /> 
      </serviceCredentials> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 

    <bindings> 
     <wsHttpBinding> 
     <binding name="Binding1"> 
      <security mode="TransportWithMessageCredential"> 
      <transport clientCredentialType="None" /> 
      <message clientCredentialType="UserName" /> 
      </security> 
     </binding> 
     </wsHttpBinding> 
    </bindings> 

    <services> 
     <service behaviorConfiguration="Behavior1" name="Service.Service"> 
     <host> 
      <baseAddresses> 
      <add baseAddress="https://localhost/" /> 
      </baseAddresses> 
     </host> 
     <endpoint address="" binding="wsHttpBinding" bindingConfiguration="Binding1" contract="Service.IService" /> 
     <endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange" /> 
     </service> 
    </services> 

    </system.serviceModel> 

</configuration> 

Клиент конфигурации:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 

    <system.serviceModel> 

    <bindings> 
     <wsHttpBinding> 
     <binding name="WSHttpBinding_IService"> 
      <security mode="TransportWithMessageCredential"> 
      <transport clientCredentialType="None" /> 
      <message clientCredentialType="UserName" /> 
      </security> 
     </binding> 
     </wsHttpBinding> 
    </bindings> 

    <client> 
     <endpoint address="https://localhost:44303/UsernamePasswordService.svc" 
     binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IService" 
     contract="ServiceReference1.IService" name="WSHttpBinding_IService" /> 
    </client> 

    </system.serviceModel> 
</configuration> 

клиент в моем случае это приложение WinForms.

Я очень новичок в настройке этого и просто хотел подтвердить, является ли это правильной/хорошей настройкой для HTTPS (SSL) с учетными данными UserName?

Поскольку я использую самозаверяющий сертификат, я должен обойти проверку сертификата на стороне клиента, и поэтому я не чувствую, что вижу, как это будет работать с действующим сертификатом.

Как я мог предположить, что это будет работать, так это то, что сервер передает клиентский сертификат клиенту при запуске связи, а затем клиент шифрует весь трафик, который он отправляет на сервер с сертификатом клиента. Затем этот трафик расшифровывается с сертификатом сервера на сервере.

Но так ли это будет работать? Теперь, когда он сконфигурирован, сертификат указан только на портах прослушивания IIS, и будет ли он генерировать сертификат для клиента на основе сертификата сервера для каждого запроса? Или трафик с клиента будет незашифрованным?

Я попытался запустить скрипач по моим запросам и включил дешифрование HTTPS, и заметил, что могу читать имя пользователя и пароль в виде обычного текста в XML. Это потому, что скрипач делает какую-то магию для чтения моего шифрования сертификата или это сообщение отправлено не зашифрованным вообще?

В этом случае необходимо ли мне зашифровать и дешифровать данные?

Я не хочу устанавливать сертификат на клиента.

ответ

0

Короткий ответ на ваш первый вопрос, на мой взгляд, да - HTTPS (SSL) с учетными данными UserName может быть допустимой конфигурацией безопасности. Использование WSHttpBinding реализует спецификацию WS-Security и обеспечивает взаимодействие с службами, которые реализуют спецификации WS- *.

Ссылка: http://msdn.microsoft.com/en-us/library/ms731172(v=vs.110).aspx

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

Честно говоря, я не полностью понял остальную часть вопроса, хотя, как я понимаю, у вас есть опасения по поводу использования клиентом последствий использования самозаверяющего сертификата. Тем не менее, следующие ссылки (по крайней мере один) должны дать некоторые ориентиры:

http://msdn.microsoft.com/en-us/library/ff648840.aspx
http://www.codeproject.com/Articles/570539/HTTPSplusCommunicationplusinplusWCFplususingplusSe
http://blog.adnanmasood.com/2010/04/29/step-by-step-guide-for-authenticating-wcf-service-with-username-and-password-over-ssl/

Смежные вопросы