Пример использования режима безопасности служб 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 <wsHttpBinding> <binding name="NewBinding1"> <security mode="Transport"> <transport clientCredentialType="Certificate"/> </security> </binding> </wsHttpBinding>
Установить сертификат клиента и установить способ проверки сертификата сервиса, изменив тег configuration\system.serviceModel\behaviors\endpointBehaviors\behavior
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 <!-- <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 <security mode="Transport"> <message clientCredentialType="Certificate" /> </security>
Заменить разрешение протокола http на разрешение протоколоа https
Copy Code <serviceMetadata httpsGetEnabled="true" />
Для модификации самостоятельного приложения службы, необходимо внести следующие изменения в код SelfHost.cs
Установить режим безопасности у данной привязки в транспорт
C# Copy Code b.Security.Mode = SecurityMode.Transport;
Установить режим идентификации клиента по сертификату
C# Copy Code b.Security.Transport.ClientCredentialType = TcpClientCredentialType.Certificate;
Разрешаем доступ к метаданным по https и запрещаем http:
C# Copy Code //smb.HttpGetEnabled = true; smb.HttpsGetEnabled = true;
Для возможности запуска всех примров данной группы (WCF) независимо, по сравнению с базовым примером изменен адрес привязки как в клиента, так и в серверах.
Изменения при переходе от ключей и сертификатов Rsa к ГОСТ
На стороне клиента требуется
генерация новых ключей и сертификатов
в конфигурационном файла клиента (app.config) изменить сертификат клиента на вновь сгенеренный в clientCertificate configuration\system.serviceModel\behaviors\endpointBehaviors\behavior\clientCredentials\clientCertificate
На стороне самостоятельного приложения службы требуется
генерация новых ключей и сертификатов
Перепривязка вновь сгенерированного сертификата на заданный порт (8000).
На стороне службы IIS требуется
генерация новых ключей и сертификатов
Перепривязка вновь сгенерированного сертификата к IIS https.