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


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

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

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

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

Обсуждение

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

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

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

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

<d:Security ... >
  [<d:Sig Scheme="xs:anyURI"
         [KeyId="xs:base64Binary"]?
          Refs="..."
         [PrefixList]="xs:NMTOKENS"
          Sig="xs:base64Binary"
          ... />]?
  ...
</d:Security>

Примечание.

Элемент 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: библиотека, которая предоставляет безопасную привязку. Библиотека вычисляет и проверяет компактную сигнатуру для исходящих и входящих сообщений.

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

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

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

Примечание.

Если файл 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, который удаляет сертификаты, созданные для этого образца.