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


Обзор безопасности транспорта

Механизмы безопасности транспорта в Windows Communication Foundation (WCF) зависят от используемой привязки и транспорта. Например, при использовании WSHttpBinding класса транспорт — HTTP, а основной механизм защиты транспорта — протокол SSL по протоколу HTTP, который обычно называется HTTPS. В этом разделе рассматриваются основные механизмы безопасности транспорта, используемые в привязках, предоставляемых системой WCF.

Замечание

При использовании безопасности SSL с .NET Framework 3.5 и более поздними версиями клиент WCF использует как промежуточные сертификаты в хранилище сертификатов, так и промежуточные сертификаты, полученные во время согласования SSL для выполнения проверки цепочки сертификатов на сертификат службы. .NET Framework 3.0 использует только промежуточные сертификаты, установленные в локальном хранилище сертификатов.

Предупреждение

Когда используется защита данных при транспортировке, свойство Thread.CurrentPrincipal может быть перезаписано. Чтобы предотвратить это, установите ServiceAuthorizationBehavior.PrincipalPermissionMode на PrincipalPermissionMode.None. ServiceAuthorizationBehavior — это поведение службы, которое можно задать в описании службы.

BasicHttpBinding

По умолчанию BasicHttpBinding класс не обеспечивает безопасность. Эта привязка предназначена для взаимодействия с поставщиками веб-служб, которые не реализуют безопасность. Однако вы можете включить безопасность, задав свойству Mode любое значение, за исключением None. Чтобы включить безопасность транспорта, задайте для свойства значение Transport.

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

Класс BasicHttpBinding в основном используется для взаимодействия с существующими веб-службами, и многие из этих служб размещаются службами IIS. Следовательно, безопасность транспортного уровня для этой привязки предназначена для беспрепятственного взаимодействия с сайтами IIS. Это делается путем задания режима Transport безопасности и последующего задания типа учетных данных клиента. Значения типов учетных данных соответствуют механизмам безопасности каталогов IIS. В следующем коде показан режим установки и тип учетных данных, заданный в Windows. Эту конфигурацию можно использовать, если клиент и сервер находятся в одном домене Windows.

BasicHttpBinding b = new BasicHttpBinding();
b.Security.Mode = BasicHttpSecurityMode.Transport ;
b.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows;
Dim b As BasicHttpBinding = New BasicHttpBinding()
b.Security.Mode = BasicHttpSecurityMode.Transport
b.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows

Или в настройках:

<bindings>  
  <basicHttpBinding>  
    <binding name="SecurityByTransport">  
      <security mode="Transport">  
        <transport clientCredentialType="Windows" />  
       </security>  
     </binding>  
  </basicHttpBinding>  
</bindings>  

В следующих разделах рассматриваются другие типы учетных данных клиента.

Базовый

Это соответствует методу базовой проверки подлинности в IIS. При использовании этого режима сервер IIS должен быть настроен с учетными записями пользователей Windows и соответствующими разрешениями файловой системы NTFS. Дополнительные сведения о IIS 6.0 см. в разделе "Включение базовой проверки подлинности" и настройка имени области. Дополнительные сведения о IIS 7.0 см. в разделе "Настройка базовой проверки подлинности( IIS 7)".

Сертификат

Служба IIS может требовать, чтобы клиенты входить в систему с помощью сертификата. Эта функция также позволяет IIS сопоставлять сертификат клиента с учетной записью Windows. Дополнительные сведения о IIS 6.0 см. в разделе "Включение сертификатов клиентов" в IIS 6.0. Дополнительные сведения о IIS 7.0 см. в разделе "Настройка сертификатов сервера" в IIS 7.

дайджест

Проверка подлинности дайджеста похожа на обычную проверку подлинности, но предлагает преимущество отправки учетных данных в виде хэша, а не в виде чистого текста. Дополнительные сведения о IIS 6.0 см. в разделе "Дайджест-проверка подлинности" в IIS 6.0. Дополнительные сведения о IIS 7.0 см. в разделе "Настройка дайджест-проверки подлинности( IIS 7)".

Виндоус

Это соответствует встроенной проверке подлинности Windows в IIS. Если задано это значение, сервер также должен существовать в домене Windows, использующего протокол Kerberos в качестве контроллера домена. Если сервер не находится на домене с поддержкой Kerberos или в случае, если система Kerberos выходит из строя, можно использовать значение NT LAN Manager (NTLM), описанное в следующем разделе. Дополнительные сведения о IIS 6.0 см. в статье "Встроенная проверка подлинности Windows" в IIS 6.0. Дополнительные сведения о IIS 7.0 см. в разделе "Настройка сертификатов сервера" в IIS 7.

NTLM

Это позволяет серверу использовать NTLM для проверки подлинности, если протокол Kerberos завершается сбоем. Дополнительные сведения о настройке IIS в IIS 6.0 см. в разделе Принудительная проверка подлинности NTLM. Для IIS 7.0 проверка подлинности Windows включает проверку подлинности NTLM. Дополнительные сведения см. в разделе "Настройка сертификатов сервера" в IIS 7.

WsHttpBinding

Класс WSHttpBinding предназначен для взаимодействия со службами, реализующими спецификации WS-* . Транспортная безопасность для этой привязки обеспечивается протоколом Secure Sockets Layer (SSL) поверх HTTP, или HTTPS. Чтобы создать приложение WCF, использующее SSL, используйте службы IIS для размещения приложения. Кроме того, если вы создаете локальное приложение, используйте средство HttpCfg.exe для привязки сертификата X.509 к конкретному порту на компьютере. Номер порта указывается как часть приложения WCF в качестве адреса конечной точки. При использовании режима транспорта адрес конечной точки должен включать протокол HTTPS или исключение будет возникать во время выполнения. Для получения дополнительной информации см. Безопасность транспортировки HTTP.

Для аутентификации клиента установите свойство ClientCredentialType класса HttpTransportSecurity на одно из значений перечисления HttpClientCredentialType. Значения перечисления идентичны типам BasicHttpBinding учетных данных клиента и предназначены для размещения со службами IIS.

В следующем примере показана привязка, используемая с типом учетных данных клиента Windows.

// The code uses a shortcut to specify the security mode to Transport.
WSHttpBinding b = new WSHttpBinding(SecurityMode.Transport);
b.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows;
' The code uses a shortcut to specify the security mode to Transport.
Dim b As WSHttpBinding = New WSHttpBinding(SecurityMode.Transport)
b.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows

WSDualHttpBinding (ВСДуалHttpБиндинг)

Эта привязка обеспечивает только безопасность на уровне сообщений, а не безопасность на уровне транспорта.

NetTcpBinding

Класс NetTcpBinding использует TCP для транспорта сообщений. Безопасность режима транспорта обеспечивается путем реализации протокола TLS по протоколу TCP. Реализация TLS предоставляется операционной системой.

Вы также можете указать тип учетных данных клиента, задав ClientCredentialType свойству TcpTransportSecurity класса одно из TcpClientCredentialType значений, как показано в следующем коде.

NetTcpBinding b = new NetTcpBinding();
b.Security.Mode = SecurityMode.Transport;
b.Security.Transport.ClientCredentialType =
TcpClientCredentialType.Certificate;
Dim b As NetTcpBinding = New NetTcpBinding()
b.Security.Mode = SecurityMode.Transport
b.Security.Transport.ClientCredentialType = TcpClientCredentialType.Certificate

Клиент

На клиенте необходимо указать сертификат с помощью SetCertificate метода X509CertificateInitiatorClientCredential класса.

Замечание

Если вы используете безопасность Windows, сертификат не требуется.

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

NetTcpBinding b = new NetTcpBinding();
b.Security.Mode = SecurityMode.Transport;
b.Security.Transport.ClientCredentialType = TcpClientCredentialType.Certificate;
EndpointAddress a = new EndpointAddress("net.tcp://contoso.com/TcpAddress");
ChannelFactory<ICalculator> cf = new ChannelFactory<ICalculator>(b, a);
cf.Credentials.ClientCertificate.SetCertificate(
    StoreLocation.LocalMachine,
    StoreName.My,
    X509FindType.FindByThumbprint,
    "0000000000000000000000000000000000000000");
Dim b As NetTcpBinding = New NetTcpBinding()
b.Security.Mode = SecurityMode.Transport
b.Security.Transport.ClientCredentialType = TcpClientCredentialType.Certificate
Dim a As New EndpointAddress("net.tcp://contoso.com/TcpAddress")
Dim cf As ChannelFactory(Of ICalculator) = New ChannelFactory(Of ICalculator)(b, a)
cf.Credentials.ClientCertificate.SetCertificate( _
    StoreLocation.LocalMachine, _
    StoreName.My, _
    X509FindType.FindByThumbprint, _
    "0000000000000000000000000000000000000000")

Кроме того, укажите сертификат в конфигурации клиента с помощью <элемента clientCredentials> в разделе поведения.

<behaviors>  
  <behavior>  
   <clientCredentials>  
     <clientCertificate findValue= "101010101010101010101010101010000000000"
      storeLocation="LocalMachine" storeName="My"
      X509FindType="FindByThumbPrint">  
     </clientCertificate>  
   </clientCredentials>  
 </behavior>  
</behaviors>

NetNamedPipeBinding

Класс NetNamedPipeBinding предназначен для эффективного взаимодействия между компьютерами; то есть для процессов, выполняющихся на одном компьютере, хотя именованные каналы могут быть созданы между двумя компьютерами в одной сети. Эта привязка обеспечивает только безопасность на уровне транспорта. При создании приложений с помощью этой привязки адреса конечных точек должны содержать "net.pipe" в качестве протокола адреса конечной точки.

WSFederationHttpBinding

При использовании безопасности транспорта эта привязка использует SSL по протоколу HTTP, известному как HTTPS с выданным маркером (TransportWithMessageCredential). Дополнительные сведения о приложениях федерации см. в разделе "Федерация" и "Выданные токены".

NetPeerTcpBinding

Класс NetPeerTcpBinding — это безопасный транспорт, предназначенный для эффективного взаимодействия с помощью функции одноранговой сети. Как указано в имени класса и привязки, TCP — это протокол. Если для режима безопасности задано значение Transport, привязка реализует TLS через TCP. Дополнительную информацию о функции одноранговой сети можно найти в разделе «Одноранговые сети».

MsmqIntegrationBinding и NetMsmqBinding

Полное обсуждение безопасности транспорта с помощью очереди сообщений (ранее называемой MSMQ) см. в разделе "Защита сообщений с помощью безопасности транспорта".

См. также