Поделиться через


Безопасность транспорта с проверкой подлинности с использованием сертификатов

В этом разделе рассматривается проверка подлинности сервера и клиента при использовании безопасности транспорта с помощью сертификатов X.509. Дополнительные сведения о сертификатах X.509 см. в разделе Сертификаты открытого ключа X.509. Сертификаты должны выдаваться центром сертификации, который обычно является сторонним издателем сертификатов. В домене Windows Server для выдачи сертификатов клиентским компьютерам домена можно использовать службу сертификации Active Directory. Дополнительные сведения см. в разделе Службы сертификатов Windows 2008 R2. В этом сценарии служба размещена в службах IIS, которые используют протокол SSL. В службе задано использование сертификата SSL (X.509), чтобы клиенты могли проверять подлинность сервера. В клиенте также задано использование сертификата X.509, что позволяет службе проверять подлинность клиента. Клиент должен доверять сертификату сервера, а сервер ― сертификату клиента. Фактический механизм проверки подлинности друг друга службой и клиентом в данном разделе не обсуждается. Дополнительные сведения см. в разделе Цифровая подпись в Wikipedia.

В этом сценарии реализуется шаблон обмена сообщениями «запрос-ответ», показанный на следующей схеме.

Защита передачи с помощью сертификатов

Дополнительные сведения использовании сертификата со службой см. в разделах Работа с сертификатами и Как настраивать порт с использованием SSL-сертификата. В следующей таблице описываются различные особенности этого сценария.

Характеристика Описание

Режим безопасности

Транспорт

Взаимодействие

С существующими службами и клиентами веб-служб.

Проверка подлинности (сервера)

Проверка подлинности (клиента)

Да (с использованием SSL-сертификата)

Да (с использованием сертификата X.509)

Целостность данных

Да

Конфиденциальность данных

Да

Транспорт

HTTPS

Привязка

WSHttpBinding

Настройка службы

Поскольку в этом сценарии служба размещается в службах IIS, он настраивается с помощью файла web.config. В следующем примере содержимого файла web.config показано, как настроить в WSHttpBinding использование безопасности транспорта и учетных данных клиента X.509.

<configuration>
  <system.serviceModel>
    <protocolMapping>
      <add scheme="https" binding="wsHttpBinding" />
    </protocolMapping>
    <bindings>
      <wsHttpBinding>
        <!-- configure wsHttp binding with Transport security mode and clientCredentialType as Certificate -->
        <binding>
          <security mode="Transport">
            <transport clientCredentialType="Certificate"/>            
          </security>
        </binding>
      </wsHttpBinding>
    </bindings>
    <!--For debugging purposes set the includeExceptionDetailInFaults attribute to true-->
    <behaviors>
      <serviceBehaviors>
        <behavior>          
           <serviceDebug includeExceptionDetailInFaults="True" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>

Настройка клиента

Настроить клиент можно в коде или в файле app.config. В следующем примере показано, как настроить клиент в коде.

// Create the binding.
WSHttpBinding myBinding = new WSHttpBinding();
myBinding.Security.Mode = SecurityMode.Transport;
myBinding.Security.Transport.ClientCredentialType =
   HttpClientCredentialType.Certificate;

// Create the endpoint address. Note that the machine name 
// must match the subject or DNS field of the X.509 certificate
// used to authenticate the service. 
EndpointAddress ea = new
   EndpointAddress("https://localhost/CalculatorService/service.svc");

// Create the client. The code for the calculator 
// client is not shown here. See the sample applications
// for examples of the calculator code.
CalculatorClient cc =
   new CalculatorClient(myBinding, ea);

// The client must specify a certificate trusted by the server.
cc.ClientCredentials.ClientCertificate.SetCertificate(
    StoreLocation.CurrentUser,
    StoreName.My,
    X509FindType.FindBySubjectName,
    "contoso.com");

// Begin using the client.
Console.WriteLine(cc.Add(100, 1111));
//...
cc.Close();

Также можно настроить клиент в файле App.config, как показано в следующем примере:

<configuration>
  <system.serviceModel>
    <client>
      <!-- this endpoint has an https: address -->
      <endpoint address=" https://localhost/CalculatorService/service.svc " 
                behaviorConfiguration="endpointCredentialBehavior"
                binding="wsHttpBinding" 
                bindingConfiguration="Binding1" 
                contract="Microsoft.Samples.TransportSecurity.ICalculator"/>
    </client>
    <behaviors>
      <endpointBehaviors>
        <behavior name="endpointCredentialBehavior">
          <clientCredentials>
            <clientCertificate findValue="contoso.com"
                               storeLocation="CurrentUser"
                               storeName="My"
                               x509FindType="FindBySubjectName" />
          </clientCredentials>
        </behavior>
      </endpointBehaviors>
    </behaviors>
    <bindings>
      <wsHttpBinding>
        <!-- configure wsHttpbinding with Transport security mode
                   and clientCredentialType as Certificate -->
        <binding name="Binding1">
          <security mode="Transport">
            <transport clientCredentialType="Certificate"/>
          </security>
        </binding>
      </wsHttpBinding>
    </bindings>
  </system.serviceModel>

<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>

См. также

Основные понятия

Общие сведения о безопасности

Другие ресурсы

Модель безопасности для Windows Server App Fabric