Я разрабатываю службу 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. Это потому, что скрипач делает какую-то магию для чтения моего шифрования сертификата или это сообщение отправлено не зашифрованным вообще?
В этом случае необходимо ли мне зашифровать и дешифровать данные?
Я не хочу устанавливать сертификат на клиента.