Пример использования режима безопасности служб WCF в режиме сообщения и использования идентификации клиента WCF на основе сертификата.
Демонстрирует
Данный пример демонстрирует использование режима сообщений с использованием алгоритмов ГОСТ и идентификацией на основе сертификатов алгоритма ГОСТ.
Исходные тексты
Исходные тексты примера находятся в файле WCF.zip в подкаталоге Certif и состоят из клиента (каталог Client), исполняемого модуля службы (каталог SelfHost), и службы в виде приложения IIS (каталог IIS), Подробнее см. Сборка, запуск и местоположение примеров WCF.
Как собрать пример
Сборка приммера не требует дополнительных действий, по сравнению с инструкциями по сборке к данной группе примеров, указанных в Сборка, запуск и местоположение примеров WCF.
Как запустить пример
Перед запуском примера необходимо создать два секретных ключа и два соответствующих им сертификата: ключ службы и ключ клиента как это описано в Сборка, запуск и местоположение примеров WCF.
Запуск примера возможен как с использованием самостоятельного приложения службы (SelfHost), так и при помощи IIS. При использовании IIS следует создать виртуальный каталог ServiceModelSamplesCert2. В остальном запуск примера соответствует инструкции Сборка, запуск и местоположение примеров WCF.
Для запуска приложения сервера необходима установленная серверная лицензия на КриптоПро CSP, в прайс-листе данная лицензия именуется как "Лицензия на право пользования СКЗИ КриптоПро CSP на одном сервере (включает право пользования КриптоПро TLS)."
Как модифицировать базовый пример до данного
Для модификации клиента, необходимо
Модифицировать секцию configuration\system.serviceModel\behaviors\endpointBehaviors\behavior конфигурации клиента (app.config), добавив clientCredentials с сертификатом клиента и способом проверки сертификата сервера.
Copy Code <behavior name="NewBehavior"> <clientCredentials> <clientCertificate findValue="TestGostNet" storeLocation="CurrentUser" storeName="My" x509FindType="FindBySubjectName"/> <serviceCertificate> <!-- Способ проверки серверного сертификата. --> <authentication certificateValidationMode="None"/> </serviceCertificate> </clientCredentials> </behavior>
Модифицировать привязку: изменив секцию configuration\system.serviceModel\bindings\ wsHttpBinding\binding и изменив режим безопасности на Message, установив аудентификацию по сертификату и изменив алгоритм аутентификации на ГОСТ (BasicGost).
Copy Code <binding name="NewBinding1"> <security mode="Message"> <!-- Аудентификация клиента по сертификату. --> <message clientCredentialType="Certificate" algorithmSuite="BasicGost"/> </security> </binding>
Для модификации самостоятельного приложения службы, необходимо внести следующие изменения в код SelfHost.cs
Изменить режим безопасности
C# Copy Code b.Security.Mode = SecurityMode.Message;
Установить аутентификацию клиента по сертификату.
C# Copy Code b.Security.Message.ClientCredentialType = MessageCredentialType.Certificate;
Установить данные собственного сертификата
C# Copy Code selfHost.Credentials.ServiceCertificate.SetCertificate( StoreLocation.LocalMachine, StoreName.My, X509FindType.FindBySubjectDistinguishedName, "CN=localhost, OU=Sharpei, O=CryptoPro, C=RU");
Установить способ проверки клиентского сертификата.
C# Copy Code selfHost.Credentials.ClientCertificate.Authentication.CertificateValidationMode = X509CertificateValidationMode.None;
Для модификации сервиса IIS необходимо изменить конфигурационный файл web.config в следующих тегах
Изменить режим безопасности в теге configuration\system.serviceModel\bindingsws\HttpBinding\binding и установить аутентификацию клиента по сертификату
Copy Code <security> <message clientCredentialType="Certificate" /> </security>
Установить данные собственного сертификата добавив в configuration\system.serviceModel\bihaviors\serviceBehaviors\behavior\serviceCredentials
Copy Code <serviceCertificate findValue="CN=localhost, OU=Sharpei, O=CryptoPro, C=RU" x509FindType="FindBySubjectDistinguishedName" />
Установить способ проверки клиентского сертификата добавив в configuration\system.serviceModel\bihaviors\serviceBehaviors\behavior\serviceCredentials
Copy Code <clientCertificate> <authentication certificateValidationMode="None"/> </clientCertificate>
Для возможности запуска всех примров данной группы (WCF) независимо, по сравнению с базовым примером изменен адрес привязки как в клиента, так и в серверах.
Изменения при переходе от ключей и сертификатов Rsa к ГОСТ
На стороне клиента требуется
генерация новых ключей и сертификатов
в конфигурационном файла клиента (app.config) изменить сертификат клиента на вновь сгенеренный в clientCertificate configuration\system.serviceModel\behaviors\endpointBehaviors\behavior\clientCredentials\clientCertificate
Изменить алгоритм шифрования на BasicGost configuration\system.serviceModel\bindingswsHttpBinding\binding\security\message
На стороне самостоятельного приложения службы требуется
генерация новых ключей и сертификатов
изменение параметров поиска ключа и сертификата службы в функции selfHost.Credentials.ServiceCertificate.SetCertificate
На стороне службы IIS требуется
генерация новых ключей и сертификатов
изменение параметров поиска ключа и сертификата службы в конфигурационном файле web.config в теге configuration\system.serviceModel\behaviors\serviceBehaviors\behavior\serviceMetadata\serviceCredentials\serviceCertificate