♦ 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 полученного сообщения).