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


Безопасность распределенных приложений

Безопасность Windows Communication Foundation (WCF) разбита на три основные функциональные области: безопасность передачи, управление доступом и аудит. Безопасность передачи обеспечивает целостность, конфиденциальность и проверку подлинности. Безопасность передачи предоставляется одним из следующих элементов: безопасность транспорта, безопасность сообщений или TransportWithMessageCredential.

Общие сведения о безопасности сообщений WCF см. в разделе "Общие сведения о безопасности". Дополнительные сведения о двух других элементах безопасности WCF см. в разделе "Авторизация и аудит".

Сценарии безопасности передачи

Ниже приведены распространенные сценарии, использующие безопасность передачи WCF:

  • Безопасная передача с помощью Windows. Клиент и служба WCF развертываются в домене Windows (или лесу Windows). Сообщения содержат персональные данные, поэтому требования включают взаимную проверку подлинности клиента и службы, целостность сообщений и конфиденциальность сообщений. Кроме того, требуется подтверждение того, что произошла определенная транзакция, например, получатель сообщения должен записать сведения о подписи.

  • Безопасная передача с помощью UserName и HTTPS. Для работы через Интернет необходимо разработать клиент и службу WCF. Учетные данные клиента проходят проверку подлинности в базе данных пар имени пользователя и пароля. Служба развертывается по адресу HTTPS с помощью доверенного сертификата SSL. Поскольку сообщения перемещаются по Интернету, клиенту и службе необходимо взаимно пройти проверку подлинности, а конфиденциальность и целостность сообщений должна быть сохранена во время передачи.

  • Безопасная передача с помощью сертификатов. Для работы через общедоступный Интернет необходимо разработать клиент и службу WCF. Клиент и служба имеют сертификаты, которые можно использовать для защиты сообщений. Клиент и служба используют Интернет для взаимодействия друг с другом и выполнения высокозначных транзакций, требующих целостности сообщений, конфиденциальности и взаимной проверки подлинности.

Целостность, конфиденциальность и проверка подлинности

Три функции — целостность, конфиденциальность и проверка подлинности — вместе называются безопасностью передачи. Безопасность передачи предоставляет функции, которые помогают устранить угрозы распределенного приложения. В следующей таблице кратко описаны три функции, составляющие безопасность передачи.

Функция Описание
Целостность Целостность — это уверенность в том, что данные являются полными и точными, особенно после того, как они прошли с одной точки на другую, и, возможно, были прочитаны многими субъектами. Целостность должна поддерживаться, чтобы предотвратить изменение данных и обычно достигается цифровой подписью сообщения.
Конфиденциальность Конфиденциальность — это уверенность в том, что сообщение не было прочитано кем-либо, кроме предполагаемого читателя. Например, номер кредитной карты должен быть конфиденциальным, так как он отправляется через Интернет. Конфиденциальность часто обеспечивается шифрованием данных с помощью схемы открытого ключа или закрытого ключа.
Аутентификация Проверка подлинности — это подтверждение заявленной личности. Например, при использовании банковского счета необходимо разрешить выводить средства только фактическому владельцу счета. Аутентификация может предоставляться различными средствами. Одним из распространенных методов является система пользователей и паролей. Во-вторых, используется сертификат X.509, предоставляемый сторонним поставщиком.

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

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

Режим Описание
Отсутствует Безопасность не предоставляется на уровне транспорта или на уровне сообщений. Ни один из предопределённых привязок не использует этот режим по умолчанию, кроме элемента <basicHttpBinding> или класса BasicHttpBinding, когда используется код.
Транспорт Использует безопасный транспорт, например HTTPS для целостности, конфиденциальности и взаимной проверки подлинности.
Сообщение Использует безопасность SOAP-сообщений для целостности, конфиденциальности и взаимной проверки подлинности. Сообщения SOAP защищены в соответствии со стандартами WS-Security.
Смешанный режим Использует транспортную безопасность для проверки целостности, конфиденциальности и проверки подлинности сервера. Использует безопасность сообщений (WS-Security и другие стандарты) для проверки подлинности клиента.

(Перечисление для этого режима — TransportWithMessageCredential.)
Оба Выполняет защиту и проверку подлинности на обоих уровнях. Этот режим доступен только в элементе <netMsmqBinding> .

Учетные данные и безопасность передачи

Учетные данные — это данные, представленные для установления заявленной личности или возможностей. Представление учетных данных включает представление данных и подтверждение владения данными. WCF поддерживает различные типы учетных данных на уровнях безопасности транспорта и сообщений. Вы можете указать тип учетных данных для привязки WCF.

Во многих странах или регионах водительские права являются примером документа, удостоверяющего личность. Лицензия содержит данные, представляющие личность и возможности пользователя. Он содержит доказательство владения в виде изображения владельцев. Лицензия выдана доверенным органом, как правило, государственным отделом лицензирования. Лицензия запечатана и может содержать голограмму, показывающую, что она не была изменена или подделана.

Например, рассмотрим два типа учетных данных, поддерживаемых в WCF: имя пользователя и учетные данные сертификата X.509.

Для учетных данных имени пользователя имя пользователя представляет утверждаемую личность, а пароль - доказательство владения. Доверенный центр в этом случае — это система, которая проверяет имя пользователя и пароль.

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

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

Типы учетных данных клиента транспорта

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

Настройки Описание
Отсутствует Указывает, что клиенту не нужно представлять учетные данные. Это переводится как анонимный клиент.
Базовый Указывает базовую проверку подлинности. Дополнительные сведения см. в разделе RFC2617 "Проверка подлинности HTTP: обычная и дайджест-проверка подлинности".
дайджест Указывает сводную аутентификацию. Дополнительные сведения см. в разделе RFC2617 "Проверка подлинности HTTP: обычная и дайджест-проверка подлинности".
Ntlm Указывает подлинность Windows через механизм согласования SSPI в домене Windows.

Результаты согласования SSPI приводят к использованию протокола Kerberos или NT LanMan (NTLM).
Виндоус Указывает проверку подлинности Windows с помощью SSPI в домене Windows. SSPI выбирает из протокола Kerberos или из NTLM в качестве службы проверки подлинности.

SSPI сначала пытается выполнить протокол Kerberos; Если это не удается, он использует NTLM.
Сертификат Выполняет проверку подлинности клиента с помощью сертификата, обычно X.509.

Типы учетных данных клиента сообщений

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

Настройки Описание
Отсутствует Позволяет службе взаимодействовать с анонимными клиентами.
Виндоус Разрешает обмен сообщениями SOAP в контексте учетных данных Windows, прошедших проверку подлинности. Использует механизм согласования SSPI для выбора из протокола Kerberos или NTLM в качестве службы проверки подлинности.
Имя пользователя Позволяет службе требовать, чтобы клиент прошел проверку подлинности с помощью учетных данных имени пользователя. Обратите внимание, что WCF не разрешает какие-либо криптографические операции с именем пользователя, например создание подписи или шифрование данных. Таким образом, WCF обеспечивает защиту транспорта при использовании учетных данных имени пользователя.
Сертификат Позволяет службе требовать, чтобы клиент прошел проверку подлинности с помощью сертификата.
CardSpace Позволяет службе требовать, чтобы клиент прошел проверку подлинности с помощью CardSpace.

Аккредитация в программировании

Для каждого типа учетных данных клиента программная модель WCF позволяет указать значения учетных данных и валидаторы учетных данных, используя средства управления службой и канала.

Безопасность WCF имеет два типа учетных данных: поведение учетных данных службы и поведение учетных данных канала. Поведение учетных данных в WCF указывает фактические данные, а именно учетные данные, используемые для удовлетворения требований безопасности, выраженных с помощью привязок. В WCF класс клиента — это компонент времени выполнения, который преобразует вызовы операций в сообщения и наоборот. Все клиенты наследуют класс ClientBase<TChannel>. Свойство ClientCredentials базового класса позволяет указать различные значения учетных данных клиента.

В WCF поведение службы — это атрибуты, применяемые к классу, реализующим контракт службы (интерфейс) для программного управления службой. Класс ServiceCredentials позволяет указать сертификаты для учетных данных службы и параметров проверки клиента для различных типов учетных данных клиента.

Модель согласования для безопасности сообщений

Режим безопасности сообщений позволяет обеспечивать безопасность передачи данных, чтобы учетные данные службы были настроены на клиенте вне полосы передачи данных. Например, если вы используете сертификат, хранящийся в хранилище сертификатов Windows, необходимо использовать средство, такое как оснастка управления Майкрософт (MMC).

Режим безопасности сообщений также позволяет обеспечить безопасность при передаче данных, чтобы учетные данные службы обмениваются с клиентом в ходе первоначального согласования. Чтобы включить согласование, задайте значение NegotiateServiceCredential для свойства true.

См. также