Пример использования режима безопасности служб WCF в режиме транспорта (https) и использования идентификации клиента WCF на основе идентификации Windows.

Демонстрирует

Данный пример не использует алгоритмы ГОСТ в явном виде и создан для удобства понимания примера Пример защиты служб WCF в режиме транспорта (https) и использования идентификации на основе сертификатов. .

Исходные тексты

Исходные тексты примера находятся в файле WCF.zip в подкаталоге Ssl и состоят из клиента (каталог Client), исполняемого модуля службы (каталог SelfHost), и службы IIS (каталог IIS). Подробнее см. Сборка, запуск и местоположение примеров WCF.

Как собрать пример

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

Как запустить пример

Перед запуском примера необходимо создать секретный ключ и соответствующий ему сертификат службы как это описано в Сборка, запуск и местоположение примеров WCF.

Перед запуском примера с использованием IIS необходимо убедиться, что произведена настройка привязки порта 443 к https на сертификат службы. Cледует создать виртуальный каталог ServiceModelSamplesSsl как это описано в Сборка, запуск и местоположение примеров WCF. После настройки данного виртуального каталога, необходимо убедится, что для данного каталога в IIS включена Проверка подлинности/Проверка подлинности Windows.

Перед запуском примера с использованием самостоятельного приложения службы необходимо настроить соответствие между сертификатом службы и портом 8000 как это описано в Сборка, запуск и местоположение примеров WCF.

В остальном запуск примера соответствует инструкции Сборка, запуск и местоположение примеров WCF.

Как модифицировать базовый пример до данного

Для модификации клиента, необходимо

  • Установить режим безопасности в режиме транспорта и установить идентификацию Windows: изменив секцию configuration\system.serviceModel\bindings\wsHttpBinding.

     Copy imageCopy Code
    <wsHttpBinding>
        <binding name="NewBinding1">
            <security mode="Transport">
                <transport clientCredentialType="Windows"/>
            </security>
        </binding>
    </wsHttpBinding>
                            
  • Изменить адрес привязки с http на https, изменив тег configuration\system.serviceModel\client\endpoint как для службы IIS так и для службы в виде программы

     Copy imageCopy Code
    <!--
    <endpoint
        address="https://localhost/ServiceModelSamplesSsl/CalculatorService.svc"
        binding="wsHttpBinding"
        bindingConfiguration="NewBinding1"
        contract="ICalculator"
        name="WSHttpBinding_ICalculator"
        behaviorConfiguration="NewBehavior"/>
    -->
    <endpoint
        address="https://localhost:8000/ServiceModelSamplesSsl/CalculatorService.svc"
        binding="wsHttpBinding"
        bindingConfiguration="NewBinding1"
        contract="ICalculator"
        name="WSHttpBinding_ICalculator"
        behaviorConfiguration="NewBehavior"/>
                            

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

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

     Copy imageCopy Code
    <security mode="Transport">
        <message clientCredentialType="Windows" />
    </security>
                            
  • Заменить разрешение протокола http на разрешение протоколоа https

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

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

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

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

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

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

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

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

При переходе от ключей Rsa на ГОСТ данный пример не потребует изменений ни в тексте программ ни в конфигурационных файлах. Изменения связаны с генерацией секретного ключа сервиса и соответствующего сертификата, установки в нужные хранилища и перепривязки к порту (в случае самостоятельного приложения) или к IIS.

См. также