Как настраивать протокол SSL в службе WCF, размещенной в IIS

В этом разделе описано, как настроить размещенную в IIS службу WCF для использования безопасности транспорта HTTP. Для безопасности транспорта HTTP требуется, чтобы SSL-сертификат был зарегистрирован в службах IIS. Если SSL-сертификат не установлен, для создания тестового сертификата можно использовать службы IIS. Затем необходимо добавить SSL-привязку для проекта веб-сайта и установить свойства проверки подлинности веб-сайта. Наконец, необходимо настроить службу WCF на использование протокола HTTPS.

Создание самозаверяющего сертификата

  1. Откройте диспетчер служб IIS (inetmgr.exe) и выберите имя компьютера в левой части представления в виде дерева. В правой части экрана выберите сертификаты сервера

    IIS Manager Home Screen

  2. В окне сертификатов сервера щелкните ссылку "Создать самозаверяющий сертификат"....

    Creating a self-signed certificate with IIS

  3. Введите понятное имя самозаверяющего сертификата и нажмите кнопку "ОК".

    Create Self-Signed Certificate Dialog

    Теперь в окне сертификатов сервера отображаются только что созданные самозаверяемые сведения о сертификате .

    Server Certificate Window

    Созданный сертификат устанавливается в хранилище доверенных корневых центров сертификации.

Добавление привязки SSL

  1. По-прежнему в диспетчере службы IIS разверните папку "Сайты", а затем папку "Веб-сайт по умолчанию" в представлении дерева в левой части экрана.

  2. Щелкните привязки.... Ссылка в разделе "Действия" в правой верхней части окна.

    Adding an SSL binding

  3. В окне "Привязки сайта" нажмите кнопку "Добавить ".

    Site Bindings Dialog

  4. В диалоговом окне "Добавление привязки сайта" выберите https для типа и понятное имя созданного самозаверяющего сертификата.

    Site binding example

Настройка виртуального каталога для SSL

  1. В диспетчере служб IIS выберите виртуальный каталог, содержащий безопасную службу WCF.

  2. В центральной области окна выберите ssl-Параметры в разделе IIS.

    SSL Settings for virtual directory

  3. В области SSL-Параметры выберите поле "Требовать SSL-проверка" и щелкните ссылку "Применить" в разделе "Действия" справа от экрана.

    Virtual directory SSL settings

Настройка службы WCF для безопасности транспорта HTTP

  1. В файле web.config службы WCF настройте привязку HTTP на использование безопасности транспорта, как показано в следующем фрагменте XML.

    <bindings>  
          <basicHttpBinding>  
            <binding name="secureHttpBinding">  
              <security mode="Transport">  
                <transport clientCredentialType="None"/>  
              </security>  
            </binding>  
          </basicHttpBinding>  
    </bindings>  
    
  2. Укажите службу и конечную точку службы, как показано в следующем фрагменте XML.

    <services>  
          <service name="MySecureWCFService.Service1">  
            <endpoint address=""  
                      binding="basicHttpBinding"  
                      bindingConfiguration="secureHttpBinding"  
                      contract="MySecureWCFService.IService1"/>  
    
            <endpoint address="mex"  
                      binding="mexHttpsBinding"  
                      contract="IMetadataExchange" />  
          </service>  
    </services>  
    

Пример

Ниже приведен полный пример файла web.config для службы WCF, использующей безопасность транспорта HTTP

<?xml version="1.0"?>  
<configuration>  
  
  <system.web>  
    <compilation debug="true" targetFramework="4.0" />  
  </system.web>  
  <system.serviceModel>  
    <services>  
      <service name="MySecureWCFService.Service1">  
        <endpoint address=""  
                  binding="basicHttpBinding"  
                  bindingConfiguration="secureHttpBinding"  
                  contract="MySecureWCFService.IService1"/>  
  
        <endpoint address="mex"  
                  binding="mexHttpsBinding"  
                  contract="IMetadataExchange" />  
      </service>  
    </services>  
    <bindings>  
      <basicHttpBinding>  
        <binding name="secureHttpBinding">  
          <security mode="Transport">  
            <transport clientCredentialType="None"/>  
          </security>  
        </binding>  
      </basicHttpBinding>  
    </bindings>  
    <behaviors>  
      <serviceBehaviors>  
        <behavior>  
          <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->  
          <serviceMetadata httpsGetEnabled="true"/>  
          <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->  
          <serviceDebug includeExceptionDetailInFaults="false"/>  
        </behavior>  
      </serviceBehaviors>  
    </behaviors>  
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />  
  </system.serviceModel>  
  <system.webServer>  
    <modules runAllManagedModulesForAllRequests="true"/>  
  </system.webServer>  
  
</configuration>  

См. также