Образец безопасности при обнаружении
В спецификации 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>
Примечание |
---|
Элемент 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: резидентная служба, которая прослушивает объявления о входе в сеть и выходе из сети и использует защищенную конечную точку объявления.
Примечание |
---|
Если файл 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, который удаляет сертификаты, созданные для этого образца.
Примечание |
---|
Образцы уже могут быть установлены на компьютере. Перед продолжением проверьте следующий каталог (по умолчанию).
<диск_установки>:\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
|