Пример использования режима безопасности служб 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 imageCopy Code
    <wsHttpBinding>
        <binding name="NewBinding1">
            <security mode="Transport">
                <transport clientCredentialType="Certificate"/>
            </security>
        </binding>
    </wsHttpBinding>
                            
  • Установить сертификат клиента и установить способ проверки сертификата сервиса, изменив тег configuration\system.serviceModel\behaviors\endpointBehaviors\behavior

     Copy imageCopy 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 imageCopy 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 imageCopy Code
    <security mode="Transport">
        <message clientCredentialType="Certificate" />
    </security>
                            
  • Заменить разрешение протокола http на разрешение протоколоа https

     Copy imageCopy Code
    <serviceMetadata httpsGetEnabled="true" />
                            

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

  • Установить режим безопасности у данной привязки в транспорт

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

    C# Copy imageCopy Code
    b.Security.Transport.ClientCredentialType = TcpClientCredentialType.Certificate;
                            
  • Разрешаем доступ к метаданным по https и запрещаем http:

    C# Copy imageCopy Code
    //smb.HttpGetEnabled = true;
    smb.HttpsGetEnabled = true;
                            

Для возможности запуска всех примров данной группы (WCF) независимо, по сравнению с базовым примером изменен адрес привязки как в клиента, так и в серверах.

Изменения при переходе от ключей и сертификатов Rsa к ГОСТ

На стороне клиента требуется

  • генерация новых ключей и сертификатов

    в конфигурационном файла клиента (app.config) изменить сертификат клиента на вновь сгенеренный в clientCertificate configuration\system.serviceModel\behaviors\endpointBehaviors\behavior\clientCredentials\clientCertificate

На стороне самостоятельного приложения службы требуется

  • генерация новых ключей и сертификатов

  • Перепривязка вновь сгенерированного сертификата на заданный порт (8000).

На стороне службы IIS требуется

  • генерация новых ключей и сертификатов

  • Перепривязка вновь сгенерированного сертификата к IIS https.

См. также