Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Спецификация обнаружения не требует защиты конечных точек, участвующих в процессе обнаружения. Усиление сообщений для обнаружения с применением мер безопасности устраняет различные типы атак (изменение сообщений, отказ в обслуживании, воспроизведение, спуфинг).
Пример 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 добавлен в протокол версии Discovery 2008 года.
Для вычисления сигнатуры образец определяет элементы расширенной подписи. Создается 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 до тех пор, пока не останутся сертификаты.
Использование этого примера
Выполните скрипт Setup.bat из командной строки разработчика для Visual Studio. В примере используются сертификаты для подписывания и проверки сообщений. Скрипт создает сертификаты с помощью Makecert.exe, а затем устанавливает их с помощью Certmgr.exe. Скрипт должен выполняться с правами администратора.
Чтобы создать и запустить пример, откройте файл Security.sln в Visual Studio и выберите "Перестроить все". Обновите свойства решения, чтобы запустить несколько проектов: выберите "Пуск " для всех проектов, кроме DiscoverySecureChannels. Запустите решение в обычном режиме.
После завершения работы с примером выполните скрипт Cleanup.bat, который удаляет сертификаты, созданные для этого примера.