Выбрать главу

Arrived Time

В этом свойстве MSMQ сохраняет момент времени, в который сообщение достигло очереди назначения.

Journal

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

Priority

Приоритет сообщения учитывается при его маршрутизации и при размещении в очереди.

Response Queue

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

Message ID

Данный идентификатор формируется автоматически. Получатель сообщения, желающий послать ответ, может указать этот идентификатор в свойстве Correlation ID, связывая тем самым ответ с полученным сообщением.

Correlation ID

При отправке ответа на полученное сообщение здесь следует указать значение свойства Message ID полученного сообщения.

Ряд свойств, приписываемых сообщению, связан с аутентификацией и шифрованием сообщений. Эти вопросы излагаются далее без упоминания имен соответствующих свойств. Предварительно стоить заметить, что эти же вопросы решаются системой безопасности СОМ+, но только для случая синхронных вызовов, т. к. вся система аутентификации, основанная на Kerberos или NT LAN Manager, основана на синхронной коммуникации клиента и сервера. Технология асинхронных компонент требует использования новой системы аутентификации.

Аутентификация позволяет получателю сообщения быть уверенным в том, что данное сообщение послано именно данным отправителем и в процессе передачи в сообщение не были внесены никакие искажения (целостность сообщения). Шифрование сообщения (его тела — Body) позволяет защитить передаваемую информацию от несанкционированного просмотра.

Аутентификация выполняется по запросу отправителя. Соответствующее требование задается в свойстве Auth Level, где определяется и тип электронной подписи, которую следует использовать при аутентификации в зависимости от типа сообщения.

Что делает MSMQ на стороне отправителя при запросе:

♦ Получает сертификат от приложения-отправителя

В простейшем случае, когда сообщение пересылается в рамках одного Windows 2000 домена, используется так называемый внутренний сертификат, включающий SID отправителя и его публичный ключ. Если сообщение пересылается за пределы одного домена, используется так называемый внешний сертификат, содержащий специфичную для конкретного способа аутентификации информацию. В этом случае аутентификация выполняется самим приложением-получателем, а не менеджером очереди назначения, как это происходит при использовании внутреннего сертификата. Далее мы не будем рассматривать этот случай.

Сертификат прикрепляется к сообщению и используется менеджером очереди назначения при аутентификации полученного сообщения. До использования сертификата он должен быть зарегистрирован его владельцем в Active Directory данного домена.

♦ Получает личный ключ отправителя

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

♦ Вычисляет хешированное значение сообщения

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

♦ Формирует цифровую подпись для данного сообщения

Ранее полученное хешированное значение шифруется личным ключом отправителя.

♦ Сообщение с прикрепленными сертификатом и цифровой подписью отправляется в очередь назначения.

Что делает менеджер очереди назначения по получении сообщения:

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

♦ Извлекает публичный ключ из сертификата, полученного с сообщением, о

♦ Расшифровывает цифровую подпись

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

♦ Сравнивает хешированные значения отправленного и полученного сообщений:

• Хешированные значения равны

Если SID отправителя содержится в сообщении (в одном из его свойств, в сертификате), то это означает, что отправитель желает, чтобы получатель не только проверил целостность полученного сообщения, но и выяснил, пришло ли это сообщение от заявленного отправителя.

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

Проблема решается проверкой владельца сертификата в Active Directory. Злоумышленник не может зарегистрировать свой публичный ключ под чужим SID. Это позволяет менеджеру очереди назначения сравнить SID владельца сертификата и SID, включенный в сообщение. Если они совпадают, то аутентификация прошла успешно. В противном случае сообщение уничтожается и отправителю высылается соответствующее уведомление (если он об этом просил).

• Хешированные значения различны

Сообщение уничтожается и отправителю посылается соответствующее уведомление (при наличие его просьбы)

♦ Если сообщение еще не уничтожено, проверяется право отправителя на включение сообщения в данную очередь

При формировании очереди ей приписывается свой ACL — Access Control List. Если известен SID отправителя, то выполняется просмотр списка ACL до тех пор, пока не выяснится, что данный отправитель имеет или не имеет право на включение сообщения в данную очередь. Если SID отправителя не задан, то сообщение будет включено в очередь только при отсутствии каких-либо ограничений на эту операцию в ACL.

♦ Сообщение включается в очередь, если успешно завершилась проверка в ACL. В противном случае сообщение уничтожается. Отправителю посылается соответствующее уведомление (по его просьбе).

По запросу отправителя выполняется шифрование тела сообщения. Информация об использованном алгоритме содержится в специальном свойстве сообщения. На стороне отправителя шифровку выполняет либо MSMQ, либо приложение-отправитель. На стороне получателя расшифровку выполняет менеджер очереди назначения, и в очередь сообщение включается уже в расшифрованном виде.

• Очередь

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

♦ Очереди, создаваемые приложением

При создании новой очереди необходимо определить, будет ли создаваемая очередь публичной (public) или личной (private), и будет ли она транзакционной (transactional) или нетранзакционной (non-transactional):

— Публичная очередь

Регистрируется в Active Directory и, следовательно, может быть обнаружена любым приложением. Интересно отметить, что среди параметров, приписываемых очереди при ее создании, имеется параметр, задающий тип очереди в виде GUID. Это позволяет приложениям искать публичные очереди нужного типа (например, очередь печати).

— Личная очередь

Регистрируется только на локальной машине. Другие приложения могут узнать об этой очереди от создавшего ее приложения (например, через свойство Response Queue полученного сообщения).