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


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

В спецификации Discovery не требуется защищенность конечных точек, участвующих в процессе обнаружения. Включение функций безопасности для сообщений обнаружения обеспечивает защиту от атак различного типа (изменение сообщений, отказ в обслуживании, воспроизведение, подделка пакетов). В этом образце реализованы пользовательские каналы, которые вычисляют и проверяют сигнатуры сообщений в компактном формате (описан в разделе 8.2 спецификации WS-Discovery). Образец поддерживает спецификацию Discovery 2005 и версию 1.1.

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

Обсуждение

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

Элемент защищенной привязки создает защищенные фабрики каналов и прослушиватели каналов.

Защищенная фабрика каналов

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

<d:Security ... > 
  [<d:Sig Scheme="xs:anyURI" 
         [KeyId="xs:base64Binary"]?
          Refs="..."
         [PrefixList]=”xs:NMTOKENS” 
          Sig="xs:base64Binary" 
          ... />]?
  ... 
</d:Security> 
Ee513185.note(ru-ru,VS.100).gifПримечание
Элемент PrefixList добавлен в версии 2008 протокола Discovery.

Для вычисления сигнатуры в образце определяются развернутые элементы сигнатуры. Создается XML-сигнатура (SignedInfo) с использованием префикса пространства имен ds согласно спецификации WS-Discovery. В сигнатуре содержатся ссылки на текст и все заголовки в пространствах имен обнаружения и адресации. Это исключает незаконное изменение заголовков и текста. Каждый упоминаемый элемент преобразуется в соответствии с исключительной канонизацией (http://www.w3.org/2001/10/xml-exc-c14n\#), а затем вычисляется значение выборки SHA-1 (http://www.w3.org/2000/09/xmldsig\#sha1). Значение сигнатуры вычисляется по всем упоминаемым элементам и их значениям выборки с применением алгоритма RSA (http://www.w3.org/2000/09/xmldsig\#rsa-sha1).

Сообщения подписываются сертификатом, указанным клиентом. Место хранения, имя и имя темы сертификата должны указываться при создании элемента привязки. Элемент KeyId в компактной сигнатуре представляет идентификатор ключа маркера подписания и служит идентификатором ключа субъекта (SKI) для маркера подписания либо (если SKI не существует) хэшем SHA-1 для открытого ключа маркера подписания.

Прослушиватель защищенного канала

Прослушиватель защищенного канала создает входные или дуплексные каналы, которые проверяют компактную сигнатуру в полученных сообщениях. В ходе проверки сигнатуры элемент KeyId, указанный в компактной сигнатуре, присоединенной к сообщению, используется для выбора сертификата из указанного хранилища. Если в сообщении отсутствует сигнатура или сигнатура не проходит проверку, то сообщение удаляется. Для использования защищенной привязки в образце определяется фабрика, которая создает пользовательские конечные точки UdpDiscoveryEndpoint и UdpAnnouncementEndpoint с добавленным элементом защищенной привязки обнаружения. Такие защищенные конечные точки можно использовать в прослушивателях объявлений об обнаружении и службах, поддерживающих обнаружение.

Подробные сведения об образце

В образец входит библиотека и 4 консольных приложения.

  • DiscoverySecurityChannels: библиотека, которая предоставляет доступ к защищенной привязке. Библиотека вычисляет и проверяет компактную сигнатуру для исходящих и входящих сообщений.

  • Service: резидентная служба, предоставляющая доступ к контракту ICalculatorService. Служба помечена как доступная для обнаружения. Пользователь указывает данные сертификата, используемого для подписания сообщения, указывая место хранения, имя и имя темы или другой уникальный идентификатор сертификата, а также хранилище, где находятся сертификаты клиента (сертификаты, используемые для проверки сигнатуры входящих сообщений). С учетом этих данных создается и используется точка UdpDiscoveryEndpoint с функциями безопасности.

  • Client: этот класс выполняет обнаружение ICalculatorService и вызывает методы службы. Здесь также создается точка UdpDiscoveryEndpoint с функциями безопасности,которая используется для подписания и проверки сообщений.

  • AnnouncementListener: резидентная служба, которая прослушивает объявления о входе в сеть и выходе из сети и использует защищенную конечную точку объявления.

Ee513185.note(ru-ru,VS.100).gifПримечание
Если файл Setup.bat запускается несколько раз, то диспетчер сертификатов предлагает выбрать сертификат для использования, поскольку обнаруживается несколько сертификатов. В этом случае следует прервать работу Setup.bat и запустить файл Cleanup.bat, поскольку уже созданы повторяющиеся сертификаты. Cleanup.bat также предлагает выбрать сертификат для удаления. Выберите сертификат из списка и продолжайте выполнение Cleanup.bat, пока не останется ни одного сертификата.

Использование этого образца

  1. Запустите скрипт Setup.bat из командной строки Visual Studio. Для подписания и проверки сообщений в образце применяются сертификаты. Скрипт создает сертификаты, запуская программу Makecert.exe, а затем устанавливает их, запуская программу Certmgr.exe. Скрипт необходимо запускать с правами администратора.

  2. Чтобы построить и запустить образец, откройте файл Security.sln в среде Visual Studio и выберите команду Перестроить все. Обновите свойства решения, чтобы запустить несколько проектов: выберите значение Запустить для всех проектов, кроме DiscoverySecureChannels. Запустите решение обычным образом.

  3. После завершения работы образца выполните скрипт Cleanup.bat, который удаляет сертификаты, созданные для этого образца.

Ee513185.Important(ru-ru,VS.100).gif Примечание
Образцы уже могут быть установлены на компьютере. Перед продолжением проверьте следующий каталог (по умолчанию).

<диск_установки>:\WF_WCF_Samples

Если этот каталог не существует, перейдите на страницу Образцы Windows Communication Foundation (WCF) и Windows Workflow Foundation (WF) для .NET Framework 4, чтобы загрузить все образцы Windows Communication Foundation (WCF) и WF. Этот образец расположен в следующем каталоге.

<диск_установки>:\WF_WCF_Samples\WCF\Scenario\DiscoveryScenario