Общие сведения о безопасности транспорта
Механизмы обеспечения безопасности транспорта в Windows Communication Foundation (WCF) зависят от привязки и используемого транспорта. Например, при использовании класса WSHttpBinding транспортом является протокол HTTP и в качестве основного механизма защиты транспорта применяется протокол SSL через HTTP, обычно называемый HTTPS. В данном разделе рассматриваются основные механизмы обеспечения безопасности транспорта, которые используются в привязках, предусмотренных в системе WCF.
Примечание |
---|
Если средства обеспечения безопасности на основе SSL используются с платформой .NET Framework версии 3.5 и более поздней версии, то для проверки цепочки сертификатов для сертификата службы клиент WCF использует как промежуточные сертификаты в своем хранилище сертификатов, так и промежуточные сертификаты, полученные в процессе согласования SSL. Платформа .NET Framework 3.0 использует только промежуточные сертификаты, установленные в локальном хранилище сертификатов. |
Внимание! |
---|
При использовании системы безопасности транспорта свойство CurrentPrincipal не применяется. Чтобы избежать этого, присвойте свойству PrincipalPermission значение None. ServiceAuthorizationBehavior — это поведение службы, которое можно задать в ее описании. |
BasicHttpBinding
По умолчанию класс BasicHttpBinding не обеспечивает безопасность. Эта привязка предназначена для взаимодействия с поставщиками веб-служб, которые не реализуют средства обеспечения безопасности. Однако режим безопасности можно включить, присвоив свойству Mode любое значение, кроме None. Чтобы включить режим безопасности транспорта, присвойте этому свойству значение Transport.
Взаимодействие с IIS
Класс BasicHttpBinding используется в основном для взаимодействия с существующими веб-службами, многие из которых размещаются в службах IIS. Поэтому безопасность транспорта для этой привязки предназначена для беспрепятственного взаимодействия с узлами IIS. Она обеспечивается посредством установки для режима безопасности значения Transport и последующего задания типа учетных данных клиента. Значения типа учетных данных соответствуют механизмам безопасности каталогов IIS. В следующем коде показаны установка режима и задание в качестве типа учетных данных типа Windows. Эту конфигурацию можно использовать, когда клиент и сервер находятся в одном домене Windows.
Dim b As BasicHttpBinding = New BasicHttpBinding()
b.Security.Mode = BasicHttpSecurityMode.Transport
b.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows
BasicHttpBinding b = 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>
В следующих разделах рассматриваются другие типы учетных данных клиентов.
Basic
Соответствует методу обычной проверки подлинности в IIS. При использовании этого режима на сервере IIS должны быть настроены учетные записи пользователей Windows и соответствующие разрешения файловой системы NTFS. Дополнительные сведения IIS 6,0 см. в разделе Включение обычной проверки подлинности и настройка имени области. Дополнительные сведения IIS 7.0 см. в разделе IIS 7.0, бета-версия: настройка обычной проверки подлинности.
Certificate
В IIS предусмотрена функция, требующая, чтобы клиенты входили в систему с использованием сертификата. Эта функция также позволяет IIS сопоставить сертификат клиента с учетной записью Windows. Дополнительные сведения IIS 6,0 см. в разделе Включение сертификатов клиентов в IIS 6.0. Дополнительные сведения IIS 7.0 см. в разделе IIS 7.0, бета-версия: настройка сертификатов сервера в IIS 7.0.
Digest
Дайджест-проверка подлинности подобна обычной проверке подлинности, но имеет преимущество, заключающееся в передаче учетных данных в виде хэша, а не открытого текста. Дополнительные сведения IIS 6,0 см. в разделе Дайджест-проверка подлинности в IIS 6.0. Дополнительные сведения IIS 7.0 см. в разделе IIS 7.0, бета-версия: настройка дайджест-проверки подлинности.
Windows
Соответствует встроенной проверке подлинности Windows в IIS. При задании этого значения также предполагается, что сервер находится в домене Windows, в котором для взаимодействия с контроллером домена используется протокол Kerberos. Если сервер не находится в домене с поддержкой Kerberos или происходит сбой системы Kerberos, можно использовать значение NTLM, описанное в следующем разделе. Дополнительные сведения IIS 6,0 см. в разделе Встроенная проверка подлинности Windows в IIS 6.0. Дополнительные сведения IIS 7.0 см. в разделе IIS 7.0, бета-версия: настройка сертификатов сервера в IIS 7.0.
NTLM
Позволяет серверу использовать NTLM для проверки подлинности в случае сбоя протокола Kerberos. Дополнительные сведения настройке IIS в IIS 6,0 см. в разделе Принудительное выполнение проверки подлинности NTLM. Для IIS 7.0 проверка подлинности Windows включает проверку подлинности NTLM. Дополнительные сведения см. в разделе IIS 7.0, бета-версия: настройка сертификатов сервера в IIS 7.0.
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.
Dim b As WSHttpBinding = New WSHttpBinding(SecurityMode.Transport)
b.Security.Transport.ClientCredentialType = HttpClientCredentialType.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;
WSDualHttpBinding
Эта привязка обеспечивает безопасность только на уровне сообщений, а не на транспортном уровне.
NetTcpBinding
Для передачи сообщений класс NetTcpBinding использует протокол TCP. Безопасность транспортного режима обеспечивается реализацией протокола TLS по TCP. Реализация TLS обеспечивается операционной системой.
Тип учетных данных клиента можно также задать, присвоив свойству ClientCredentialType класса TcpTransportSecurity одно из значений TcpClientCredentialType, как показано в следующем коде.
Dim b As NetTcpBinding = New NetTcpBinding()
b.Security.Mode = SecurityMode.Transport
b.Security.Transport.ClientCredentialType = TcpClientCredentialType.Certificate
NetTcpBinding b = new NetTcpBinding();
b.Security.Mode = SecurityMode.Transport;
b.Security.Transport.ClientCredentialType =
TcpClientCredentialType.Certificate;
Клиент
На клиенте следует задать сертификат с помощью метода SetCertificate класса X509CertificateInitiatorClientCredential.
Примечание |
---|
В случае использования безопасности Windows сертификат не требуется. |
В следующем коде используется отпечаток сертификата, который однозначно идентифицирует его. Дополнительные сведения сертификатах см. в разделе Работа с сертификатами.
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")
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");
Сертификат можно также задать в конфигурации клиента, используя элемент <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) см. в разделе Защита сообщений с использованием средств обеспечения безопасности транспорта.