Пример использования режима безопасности служб WCF в режиме транспорта (https) и использования идентификации клиента WCF на основе сертификатов.
 Демонстрирует
Демонстрирует
Данный пример демонстрирует использование режима транспорта https идентификацию пользователя на основе сертификатов алгоритма ГОСТ.
 Исходные тексты
Исходные тексты
Исходные тексты примера находятся в файле WCF.zip в подкаталоге Ssl2 и состоят из клиента (каталог Client), исполняемого модуля службы (каталог SelfHost), и службы IIS (каталог IIS). Подробнее см. Сборка, запуск и местоположение примеров WCF.
 Как собрать пример
Как собрать пример
Сборка примера не требует дополнительных действий, по сравнению с инструкциями по сборке к данной группе примеров, указанных в Сборка, запуск и местоположение примеров WCF.
 Как запустить пример
Как запустить пример
Перед запуском примера необходимо создать секретный ключ и соответствующий ему сертификат службы как это описано в Сборка, запуск и местоположение примеров WCF. Так же необходимо создать секретный ключ и соответствующий ему сертификат клиента как это описано в Сборка, запуск и местоположение примеров WCF.
Перед запуском примера с использованием IIS необходимо убедиться, что произведена настройка привязки порта 443 к https на сертификат службы. Cледует создать виртуальный каталог ServiceModelSamplesSsl2 как это описано в Сборка, запуск и местоположение примеров WCF. После настройки данного виртуального каталога, необходимо убедится, что для данного каталога в IIS включена настройка Параметры SSL/Требовать SSL и требовать сертификаты клиентов.
Перед запуском примера с использованием самостоятельного приложения службы необходимо настроить соответствие между сертификатом службы и портом 8000 как это описано в Сборка, запуск и местоположение примеров WCF.
В остальном запуск примера соответствует инструкции Сборка, запуск и местоположение примеров WCF.
 Как модифицировать базовый пример до данного
Как модифицировать базовый пример до данного
Для модификации клиента, необходимо
- Установить режим безопасности в режиме транспорта и установить идентификацию по сертификату: изменив секцию configuration\system.serviceModel\bindings\wsHttpBinding.  Copy Code Copy Code- <wsHttpBinding> <binding name="NewBinding1"> <security mode="Transport"> <transport clientCredentialType="Certificate"/> </security> </binding> </wsHttpBinding>
- Установить сертификат клиента и установить способ проверки сертификата сервиса, изменив тег configuration\system.serviceModel\behaviors\endpointBehaviors\behavior  Copy Code Copy Code- <clientCredentials> <clientCertificate findValue="TestGostNet" storeLocation="CurrentUser" storeName="My" x509FindType="FindBySubjectName" /> <serviceCertificate> <authentication certificateValidationMode="None" /> </serviceCertificate> </clientCredentials>
- Изменить адрес привязки с http на https, изменив тег configuration\system.serviceModel\client\endpoint как для службы IIS так и для службы в виде программы  Copy Code Copy Code- <!-- <endpoint address="https://localhost/ServiceModelSamplesSsl2/CalculatorService.svc" binding="wsHttpBinding" bindingConfiguration="NewBinding1" contract="ICalculator" name="WSHttpBinding_ICalculator" behaviorConfiguration="NewBehavior"/> --> <endpoint address="https://localhost:8000/ServiceModelSamplesSsl2/CalculatorService.svc" binding="wsHttpBinding" bindingConfiguration="NewBinding1" contract="ICalculator" name="WSHttpBinding_ICalculator" behaviorConfiguration="NewBehavior"/>
Для модификации службы IIS, необходимо внести следующие изменения в файл конфигурации Web.config
- Изменить режим безопасности в теге configuration\system.serviceModel\bindings\wsHttpBinding\binding на Transport и установить аутентификацию клиента по сертификату  Copy Code Copy Code- <security mode="Transport"> <message clientCredentialType="Certificate" /> </security>
- Заменить разрешение протокола http на разрешение протоколоа https  Copy Code Copy Code- <serviceMetadata httpsGetEnabled="true" />
Для модификации самостоятельного приложения службы, необходимо внести следующие изменения в код SelfHost.cs
- Установить режим безопасности у данной привязки в транспорт - C#  Copy Code Copy Code- b.Security.Mode = SecurityMode.Transport;
- Установить режим идентификации клиента по сертификату - C#  Copy Code Copy Code- b.Security.Transport.ClientCredentialType = TcpClientCredentialType.Certificate;
- Разрешаем доступ к метаданным по https и запрещаем http: - C#  Copy Code Copy Code- //smb.HttpGetEnabled = true; smb.HttpsGetEnabled = true;
Для возможности запуска всех примров данной группы (WCF) независимо, по сравнению с базовым примером изменен адрес привязки как в клиента, так и в серверах.
 Изменения при переходе от ключей и сертификатов Rsa к ГОСТ
Изменения при переходе от ключей и сертификатов Rsa к ГОСТ
На стороне клиента требуется
- генерация новых ключей и сертификатов - в конфигурационном файла клиента (app.config) изменить сертификат клиента на вновь сгенеренный в clientCertificate configuration\system.serviceModel\behaviors\endpointBehaviors\behavior\clientCredentials\clientCertificate 
На стороне самостоятельного приложения службы требуется
- генерация новых ключей и сертификатов 
- Перепривязка вновь сгенерированного сертификата на заданный порт (8000). 
На стороне службы IIS требуется
- генерация новых ключей и сертификатов 
- Перепривязка вновь сгенерированного сертификата к IIS https. 




