Пример использования режима безопасности служб 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 imageCopy 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 imageCopy Code
    <binding name="NewBinding1">
        <security mode="Message">
            <!-- Аудентификация клиента по сертификату. -->
            <message clientCredentialType="Certificate" algorithmSuite="BasicGost"/>
        </security>
    </binding>
                            

Для модификации самостоятельного приложения службы, необходимо внести следующие изменения в код SelfHost.cs

  • Изменить режим безопасности

    C# Copy imageCopy Code
    b.Security.Mode = SecurityMode.Message;
                            
  • Установить аутентификацию клиента по сертификату.

    C# Copy imageCopy Code
    b.Security.Message.ClientCredentialType = MessageCredentialType.Certificate;
                            
  • Установить данные собственного сертификата

    C# Copy imageCopy Code
    selfHost.Credentials.ServiceCertificate.SetCertificate(
        StoreLocation.LocalMachine,
        StoreName.My,
        X509FindType.FindBySubjectDistinguishedName,
        "CN=localhost, OU=Sharpei, O=CryptoPro, C=RU");
                            
  • Установить способ проверки клиентского сертификата.

    C# Copy imageCopy Code
    selfHost.Credentials.ClientCertificate.Authentication.CertificateValidationMode =
        X509CertificateValidationMode.None;
                            

Для модификации сервиса IIS необходимо изменить конфигурационный файл web.config в следующих тегах

  • Изменить режим безопасности в теге configuration\system.serviceModel\bindingsws\HttpBinding\binding и установить аутентификацию клиента по сертификату

     Copy imageCopy Code
    <security>
        <message clientCredentialType="Certificate" />
    </security>
                            
  • Установить данные собственного сертификата добавив в configuration\system.serviceModel\bihaviors\serviceBehaviors\behavior\serviceCredentials

     Copy imageCopy Code
    <serviceCertificate
        findValue="CN=localhost, OU=Sharpei, O=CryptoPro, C=RU"
        x509FindType="FindBySubjectDistinguishedName" />
                            
  • Установить способ проверки клиентского сертификата добавив в configuration\system.serviceModel\bihaviors\serviceBehaviors\behavior\serviceCredentials

     Copy imageCopy 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

См. также