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

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

Примечание.

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

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

При использовании системы безопасности транспорта свойство Thread.CurrentPrincipal не применяется. Чтобы предотвратить это, установите для ServiceAuthorizationBehavior.PrincipalPermissionModePrincipalPermissionMode.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

Соответствует встроенной проверке подлинности Windows в IIS. При задании этого значения также предполагается, что сервер находится в домене Windows, в котором для взаимодействия с контроллером домена используется протокол Kerberos. Если сервер не находится в домене с поддержкой Kerberos или происходит сбой системы Kerberos, можно использовать значение 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-*. Безопасность транспорта для этой привязки обеспечивается посредством протокола 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

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

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) см. в разделе "Защита сообщений с помощью безопасности транспорта".

См. также