Руководство по безопасности в Lotus Notes

Принцип единого входа (Single sign-on)

Разбить на страницы
Показывать лекцию целиком

Начнем с представления более строгого определения SSO:

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

Это определение взято с Web-сайта компании The Open Group по адресу:

http://www.opengroup.org/

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

Этот подход предполагает появление определенного количества важных преимуществ, но имеет также и некоторые недостатки. Преимуществами для конечных пользователей являются следующие положения:

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

  • Запись регистрационных данных пользователя в одном месте для управления и обеспечения безопасности.
  • Возможность ведения общих для организации политик паролирования и обеспечения безопасности, позволяющих обеспечить "сквозную" безопасность, возможно в рамках приложений и систем. Это позволит избежать проблем с несоответствием требований по сложности паролей и периодам их смены в различных системах.
  • Проще контролировать информацию о правах доступа пользователя (user security information) и при необходимости корректировать ее, чем при отслеживании всех отдельных систем, к которым имеет доступ пользователь. Это особенно важно, когда пользователям назначают роли с другими уровнями доступа.
  • Потенциальные недостатки SSO:

  • попытка первоначальной реализации может быть сложной, в зависимости от количества существующих несопоставимых систем;
  • скомпромитированные входные данные (credentials) пользователя могут привести к доступу к большому числу приложений;
  • производитель либо не использует существующий открытый стандарт, либо использует стандарты, несовместимые со стандартами, используемыми другими приложениями.
  • Сложность обеспечения SSO связана с функционированием в средах с независимыми архитектурами безопасности, директориями и т. д. для каждой из существующих платформ приложений. Для поддержки SSO нам необходимо заставить все наши приложения использовать общую инфрастуктуру безопасности для сквозной аутентификации между приложениями. Это требует некоторого общего формата для представления аутентификационной информации и параметров доступа пользователя ( credentials ), которые могут понять и правильно обработать ( accept ) все приложения. Также нам нужно иметь возможность проверить достоверность параметров доступа пользователя ( credentials )

    C технической точки зрения существует несколько различных методов, или инструментов, которые могут быть использованы, чтобы обеспечить пользователям возможность использования SSO в приложениях, написанных под WebSphere и Lotus. В этой лекции описаны методы обеспечения SSO, которые поддерживают программные продукты компании IBM:

  • заголовки HTTP (HTTP headers);
  • Lightweight Third Party Authentication (LTPA);
  • сертификаты X.509;
  • DSAPI.
  • 7.1 Методы SSO

    Все методы SSO должны быть направлены на решение трех проблем:

  • Аутентификация пользователя.
  • Установление соответствующих уровней доступа к приложениям на основе идентификационных данных пользователя.
  • Перевод удостоверения личности (users credentials) пользователя в формат, узнаваемый другими приложениями.
  • В этом разделе мы обсудим четыре основных метода, используемых для поддержки SSO со стороны различных серверов и приложений. Для каждого из методов SSO мы опишем технические функции, а также специфические проблемы и зависимости, связанные с каждым отдельным методом.

    7.1.1 Единый пароль или SSO

    Обратите внимание на то, что мы проводим различие между понятием SSO и понятием "единого пароля", которое фундаментально отличается от SSO. Единый пароль подразумевает наличие одинакового ID пользователя и пароля [мандата ( credentials )], хранящихся во множестве мест для использования различными приложениями. При таком сценарии у пользователей запрашивалась бы аутентификация для каждого приложения (или сервера), к которым они осуществляют доступ, несмотря на то, что теоретически они бы использовали для этого одни и те же ID и пароль.

    Чтобы иметь единый пароль несмотря на то, что каждое приложение использует специализированное хранилище для ID и пароля ( credentials store ), идентификаторы ( ID ) пользователей и пароли должны быть каким-то образом синхронизированы. Так как же можно синхронизировать пароли в различных хранилищах (каталогах)? Самый простой ответ, это пользователи могут вручную поддерживать идентичность своих logon-имен и паролей для различных систем, если у них есть на это соответствующие полномочия. Конечно, это без сомнения, самый недружелюбный к пользователю подход, потому что нагрузка в этом случае полностью ложится на него. Могут ли пароли быть синхронизированы программно? В некоторых случаях могут, хотя на самом деле процесс синхронизации представляет из себя одновременную смену паролей.

    Одновременные изменения паролей

    Большинство процессов "синхронизации" паролей технически являются процессом одновременного изменения паролей, происходящим в фоновом режиме. К примеру, если вы разрешили синхронизацию паролей Notes и Windows, то при изменении вами своего пароля в Notes введенный новый пароль временно сохраняется в буфере, после чего автоматически передается процессу изменения пароля Windows в фоновом режиме. Процесс очень похож на процесс синхронизации пароля Notes и Domino интернет-паролей. Одновременное изменение эффективно там, где вам необходимо набрать пароль только один раз, и он автоматически будет передан второй парольной системе.

    Синхронизация паролей

    С точки зрения обеспечения безопасности, возможность синхронизации значения пароля из хранилища, непременно связано с возникновением очень нежелательных слабых мест в системе безопасности. Слабым местом в этом случае была бы возможность извлечения версии пароля пользователя в виде открытого текста для того, чтобы его можно было записать в другой каталог. Безопасные хранилища входных данных не хранят пароль в виде открытого текста, скорее они хранят хеш или зашифрованную версию пароля. Алгоритм хеширования не должен быть реверсивным. Так, чтобы у нас не было возможности прочитать из каталога значение хеша и конвертировать его в текст. А если мы просто перепишем хешированый пароль из одного каталога в другой, то второй каталог будет иметь "хеш"-значение пароля, которое не сможет быть воспроизведено в исходный пароль, и поэтому никогда не пройдет процесс аутентификации или "связывания" ( "bind" ).

    Примечание. Domino генерирует MD2-solted хеш при сохранении интернет-пароля в документе Person, если в профиле каталога (Directory Profile) разрешена опция "Use more secure Internet Passwords" ("Использовать более безопасные интернет-пароли"). Другие каталоги могут применять другие алгоритмы хеширования (к примеру, IBM Tivoli Directory Server использует MD5). Также они будут использовать другие ключи шифрования, длины ключей и salt -значения. Значения хеш для одного и того же пароля в разных каталогах будут различными (и разных записей пользователя в том же каталоге, если они используют salted хеш). Значение(величина) хеш не подразумевает переносимости

    Если каталог предусматривает доступ администратора или программы для получения пароля в виде открытого текста, это не является безопасным.

    Процесс связывания

    Для понимания проблемы паролей и факта хранения хешированного значения пароля в "безопасных" каталогах, вам необходимо понять процесс аутентификации. Когда пользователь предоставляет регистрационное имя ( ID ) и пароль, строка пароля хешируется и затем сравнивается с значением хеша сохраненного в каталоге. Хорошим примером этого процесса является bind -запрос протокола LDAP, при использовании LDAP для хранения ID и пароля ( credentials ). Если полученный после ввода имени и пароля пользователя хеш соответствует хеш, сохраненному в каталоге, считается что "связывание" ( "bind" ) прошло успешно. Несмотря на то, что некоторые каталоги хранят как исходный пароль, так и его хеш-значение, безопасные каталоги не подразумевают доступ к исходному паролю; вы можете получить доступ только к хеш.

    Рассмотрим следующий пример.

    Пароль пользователя состоит из строки символов "password" и сохранен в IBM Directory Server как хеш-значение "[B@7a8ea817". Что случится, если мы попытаемся синхронизировать это хеш-значение с документом Person пользователя в каталоге Domino? Хеш-значение, которое сгенерирует наш сервер Domino когда мы войдем (log in) ( bind ) с паролем "password", будет выглядеть как "355E98E7C7B59BD810ED845AD0FD2FC4". Так как это значение не идентично хеш-значению из каталога LDAP, с которым мы синхронизировались ( "[B@7a8ea817" ), аутентификация с Domino будет неудачной.

    Применение единого пароля и синхронизации паролей является подходом, который минимально пригоден для, возможно, двух различных клиентов, таких как пароли Notes и Windows. Это не тот подход, который мы рекомендуем для интеграции браузерных приложений. В оставшейся части этой лекции внимание будет сфокусировано на принципе единого входа (SSO) для Web-клиентов.

    7.2 LTPA

    Маркеры Lightweight Third Party Authentication (LTPA) компании IBM, или cookies, обеспечивают средства совместного использования информации аутентификации между Web-серверами приложений Lotus, WebSphere и Tivoli. Пользователь, который однажды уже был подвергнут аутентификации со стороны сервера приложений, будет автоматически аутентифицирован на других серверах приложений в том же домене DNS при предоставлении ключей LTPA, находящихся в совместном использовании у всех приложений. LTPA применяет маркер, который сохраняется как cookie в браузере пользователя.

    Маркер LTPA содержит данные, которые уникально идентифицируют пользователя, такие, как отличительное имя [Distinguished Name (DN)] пользователя и датa истечения срока действия, которая фактически ограничивает время сеанса до значения, когда пользователь будет вынужден повторно пройти аутентификацию.

    Особые примечания относительно использования LTPA включают:

  • Все серверы приложений, использующие маркеры LTPA, должны находиться в одном и том же домене DNS.
  • Все серверы приложений должны совместно использовать один и тот же реестр пользователей (каталог LDAP). Поддерживаемые каталоги включают Lotus Domino (сконфигурированный как каталог LDAP), IBM Directory Server, MS Active Directory и iPlanet.
  • Браузеры, обеспечивающие доступ к серверам приложений, должны быть сконфигурированы на принятие cookies, которые используются для хранения содержащего информацию аутентификации маркера.
  • Необязательно, но SSO может быть настроен на работу только по зашифрованным HTTPS-соединениям.
  • LTPA является решением, разработанным компанией IBM; другие производители серверов приложений обеспечивают лишь ограниченную поддержку LTPA (или вообще ее отсутствие).
  • Условие относительно того, что все серверы приложений должны находиться в одном и том же домене DNS, не является ограничением, предъявляемым только LTPA. Маркер LTPA является cookie сеанса браузера, а свойства таких cookies определены в RFC-2965, который доступен по адресу:

    http://www.ietf.org/rfc/rfc2965.txt

    Этот RFC устанавливает, что агент пользователя (браузер) не предоставит cookie серверу, находящемуся в домене DNS, отличном от того, в котором находится выпустивший (установивший) cookie хост (сервер). Существуют прокси-архитектуры, которые могут распространяться за пределы отдельного домена DNS, но рассмотрение подобных развитых архитектур выходит за рамки данного курса.

    Для преодоления проблемы наличия множества доменов DNS существуют некоторые обходные маневры. Важным для понимания понятием является то, что домен или некая область из cookie сеанса LTPA используется только браузером клиента, но не серверами приложений. Таким образом, ключом для решения этой проблемы является использование псевдонимов DNS способом, при котором браузер отправляет cookie всем серверам, вовлеченным в доверенную среду LTPA, даже если реально они находятся в других доменах. К примеру, если ваши серверы Domino находятся в домене alpha.com, а вы имеете сервер портала в домене beta.com со страницей, на которой пользователи могут получать свою почту iNotes посредством iframe, то в Domino R5 вам необходимо сконфигурировать виртуальные серверы таким образом, чтобы они работали так, как если бы находились в домене beta.com. В Domino 6 для beta.com используйте документы Internet Site. В любом случае вам необходимо убедиться в том, что для серверов Domino в домене beta.com существуют записи псевдонимов DNS.

    Для обеспечения поддержки принципа единого входа между протоколами, такими, как HTTP и DIIOP (а также с сервером приложений IBM WebSphere), Domino предусматривает криптографический механизм на основе маркеров. Серверы, которые участвуют в обеспечении принципа единого входа, применяют зашифрованную "Web-конфигурацию SSO" ( "Web SSO Configuration" ) для совместного использования секретных данных в каталоге Domino в целях генерирования и проверки достоверности маркеров единого входа. Эта секретная информация используется сервером для проверки того, что представленный пользователем маркер был сгенерирован сервером, который совместно использует тот же секрет. В оставшейся части этой лекции мы ограничимся рассмотрением маркеров LTPA в WebSphere.

    WebSphere использует формат, называемый Lightweight Third Party Authentication (LTPA), который был реализован в Domino начиная с версии R5.0.5 и далее. Разрешение Domino взаимодействовать с WebSphere в вопросах обеспечения единого входа требует генерирования секретной информации в рамках административной среды WebSphere и последующего импортирования ее в Web-конфигурацию SSO (Web SSO Configuration). За дополнительной информацией о конфигурировании LTPA в WebSphere обратитесь к документации WebSphere.

    Примечание. В среде, где WebSphere используется совместно с продуктами Lotus, или Tivoli, или обоими вместе, ключи LTPA должны генерироваться WebSphere и импортироваться в другие продукты. Когда взаимодействие с WebSphere не требуется, Domino использует для маркера единого входа свой собственный формат, который незначительно отличается от реализованного в WebSphere. Серверы, участвующие в Domino SSO, совместно используют 20-байтовый секрет, который применяется для генерирования и проверки достоверности хеша SHA-1, доказывающего целостность маркера. Эта версия LTPA "Domino server only" ("Только для серверов Domino") не взаимодействует с LTPA WebSphere.

    7.2.1 Аутентификация

    При применении LTPA в качестве механизма аутентификации для аутентификации пользователя применяется доверенный сторонний сервер. В зависимости от того, выпущен ли уже для пользователя маркер, Web-сервер может выполнить одно из двух возможных действий. Этими двумя действиями, или механизмами, являются:

  • Создание (шифрование) маркера LTPA первоначальным сервером, к которому подключается пользователь.
  • Опрос (расшифровка) маркера LTPA, предоставленного браузером в запросе HTTP к серверу.
  • Создание маркера LTPA (шифрование)

    Пользователи подвергаются аутентификации один раз за время сеанса. Первоначальная аутентификация с использованием LTPA основана на имени и пароле, хранящихся в каталоге LDAP, когда каталогу доверяют все приложения, которые совместно используют cookie сеанса LTPA. Обратите внимание на то, что сервер каталога LDAP упоминается как "доверенная третья сторона (trusted third party)", отсюда и часть названия: "сторонняя аутентификация (аутентификация третьей стороной) (Third Party Authentication)". Когда пользователь предоставляет регистрационное имя ( ID ) и пароль первоначальному серверу в среде LTPA, тот предоставляет этот мандат пользователя в соответствующем запросе серверу каталога LDAP. Сервер каталога LDAP хеширует строку пароля, после чего она сравнивается с сохраненным хеш-значением пароля из записи пользователя в каталоге. Если полученный при регистрации пользователя хеш соответствует хешу, сохраненному в каталоге, то "связывание" считается успешным. При успеш ном связывании LDAP первоначальный Web-сервер (обычно сервер портала) сгенерирует маркер LTPA и предоставит этот cookie обратно браузеру. После этого браузер будет предоставлять этот cookie при каждом последующем HTTP-запросе пользователя к серверам, находящимся в указанном в cookie домене. Количество информации, содержащейся в cookie, минимально, отсюда термин "облегченная" (Lightweight). Структура маркера LTPA показана в табл. 7.1.

    . Определение данных маркера LTPA
    Данные Значение
    CookieName (Имя cookie) "LtpaToken" (Маркер LTPA)
    CookieValue (Значение cookie) Закодировано Base64 (Маркер LTPA)
    LtpaToken (Маркер LTPA) Зашифровано (Маркер аутентификации, совместно используемый ключ) с использованием 3DES
    AuthenticationToken (Маркер аутентификации) Данные пользователя+"%"+Дата истечения срока действия маркера+"%"+Закодировано Base64 (Цифровая подпись)
    Digital Signature (Цифровая подпись) Подписано (Данные пользователя, дата истечения срока действия маркера) с использованием секретного ключа LTPA (с применением RSA/SHA1)
    PrivateKey-ltpa (Секретный ключ LTPA) Секретный ключ (соответствующий открытому ключу, к которому могут получить доступ другие серверы) используется сервером LTPA для подписи данных аутентификации; этот секретный ключ должен быть доступен только серверу LTPA
    SharedKey (Совместно используемый ключ) Симметричный/совместно используемый ключ 3DES, который совместно применяется сервером LTPA и другими серверами для шифрования/расшифровки маркера
    UserData (Данные пользователя) Пары имени и значения, отделенные разделителем "$" (к примеру, "uid:"+ID пользователя)
    TokenExpirationDate (Дата истечения срока действия маркера) Число, представляющее время и дату истечения срока действия маркера. (Дата истечения срока действия маркера является числом миллисекунд, которые проходят начиная с полночи (00:00:00) 1 января 1970 г.)

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

    Опрос (расшифровка) маркера LTPA

    Если пользователь уже имеет маркер LTPA, то затем маркер подвергается проверке достоверности со стороны получившего его Web-сервера. Web-сервер, в свою очередь, может запросить для проверки достоверности удостоверения личности (мандата) (в нашем случае маркера LTPA) механизм аутентификации. Если маркер является действительным, то пользователь рассматривается как прошедший аутентификацию.

    Следующий пример отображает журнал отладки сервера Domino, выполняющего три шага по обработке полученного им маркера LTPA, сгенерированного WebSphere: декодирование кода Base64, расшифровка с применением совместно используемого секретного ключа (импортированного из WebSphere), и определение того, следует ли доверять имени пользователя в маркере как пользователю, прошедшему аутентификацию.

    06/09/2003 05:53:39.53 PM [03071:00010-106510] SSO API> Decoding Websphere
    style Single Sign-On token (LTPA).
    06/09/2003 05:53:39.53 PM [03071:00010-106510] SSO API> Dumping memory
    of encoded token [364 bytes].
    00000000: 6C71 3150 4847 4536 3576 597A 6154 7878 'qlP1GH6Ev5zYTaxx'
    00000010: 6F5A 534D 4262 6D70 3746 4643 6B56 3172 'ZoMSbBpmF7CFVkr1'
    00000020: 5146 7045 5762 756E 6467 4532 6C68 314B 'FQEpbWnugd2EhlK1'
    00000030: 3138 6E47 5164 5A41 634C 3965 3258 386C '81GndQAZLce9X2l8'
    00000040: 2B7A 7239 7263 7976 5537 6332 4957 4F44 'z+9rcrvy7U2cWIDO'
    00000050: 3755 4677 586D 2B6B 3768 7A31 3767 6976 'U7wFmXk+h71zg7vi'
    00000060: 3672 5949 4672 7566 4C4D 636E 6236 665A 'r6IYrFfuMLnc6bZf'
    00000070: 6E63 6A43 6246 4476 7159 476A 2F72 5445 'cnCjFbvDYqjGr/ET'
    00000080: 6742 6C57 7779 7457 3671 6632 7467 3978 'BgWlywWtq62fgtx9'
    00000090: 4947 6D71 4674 6643 7470 716D 6E56 5863 'GIqmtFCfptmqVncX'
    000000A0: 6C43 5A4A 5050 4E48 4733 336E 6F69 757A 'ClJZPPHN3Gn3iozu'
    000000B0: 4562 3777 475A 6136 3362 5138 6C4D 7554 'bEw7ZG6ab38QMlTu'
    000000C0: 5475 7166 7438 5971 5269 5736 4949 6238 'uTfq8tqYiR6WII8b'
    000000D0: 5839 6578 6552 714F 6378 6A35 4663 6435 '9XxeReOqxc5jcF5d'
    000000E0: 4343 4E69 3076 4A6D 4372 686A 306C 6A51 'CCiNv0mJrCjhl0Qj'
    000000F0: 4F57 6142 5955 7634 7771 3838 5A57 3230 'WOBaUY4vqw88WZ02'
    00000100: 6F42 7671 3939 7231 5765 3068 4753 596B 'Boqv991reWh0SGkY'
    00000110: 7A63 5862 4D31 4A4B 314E 4F6B 3576 4337 'czbX1MKJN1kOv57C'
    00000120: 7449 654A 5253 3577 477A 4352 384D 684C 'ItJeSRw5zGRCM8Lh'
    00000130: 6665 4E43 7365 504C 6B2B 7258 5157 7343 'efCNesLP+kXrWQCs'
    00000140: 5866 3741 576C 534C 4630 6941 3035 6C76 'fXA7lWLS0FAi50vl'
    00000150: 3247 356E 5076 2B68 4968 2F64 6955 3442 'G2n5vPh+hId/UiB4'
    00000160: 5065 4F6F 324C 476D 3958 3D30 'ePoOL2mGX90='
    06/09/2003 05:53:39.55 PM [03071:00010-106510] SSO API> Dumping memory
    of encoded token before decryption step [272 bytes].
    00000000: 53AA 18F5 847E 9CBF 4DD8 71AC 8366 6C12 '*Su.~.?.XM,qf..l'
    00000010: 661A B017 5685 F54A 0115 6D29 EE69 DD81 '.f.0.VJu..)min.]'
    00000020: 8684 B552 51F3 75A7 1900 C72D 5FBD 7C69 '..R5sQ'u..-G=_i|'
    00000030: EFCF 726B F2BB 4DED 589C CE80 BC53 9905 'Ookr;rmM.X.NS<..'
    00000040: 3E79 BD87 8373 E2BB A2AF AC18 EE57 B930 'y>.=s.;b/".,Wn09'
    00000050: E9DC 5FB6 7072 15A3 C3BB A862 AFC6 13F1 '\i6_rp#.;Cb(F/q.'
    00000060: 0506 CBA5 AD05 ADAB 829F 7DDC 8A18 B4A6 '..%K.-+-..\}..4'
    00000070: 9F50 D9A6 56AA 1777 520A 3C59 CDF1 69DC 'P.Y*Vw..RY<qM\i'
    00000080: 8AF7 EE8C 4C6C 643B 9A6E 7F6F 3210 EE54 'w..nlL;dn.o..2Tn'
    00000090: 37B9 F2EA 98DA 1E89 2096 1B8F 7CF5 455E '97jrZ.... ..u|^E'
    000000A0: AAE3 CEC5 7063 5D5E 2808 BF8D 8949 28AC 'c*ENcp^].(.?I.,('
    000000B0: 97E1 2344 E058 515A 2F8E 0FAB 593C 369D 'a.D#X`ZQ./+.<Y.6'
    000000C0: 8A06 F7AF 6BDD 6879 4874 1869 3673 D4D7 '../w]kyhtHi.s6WT'
    000000D0: 89C2 5937 BF0E C29E D222 495E 391C 64CC 'B.7Y.?.B"R^I.9Ld'
    000000E0: 3342 E1C2 F079 7A8D CFC2 45FA 59EB AC00 'B3Bayp.zBOzEkY.,'
    000000F0: 707D 953B D262 50D0 E722 E54B 691B BCF9 '}p;.bRPP"gKe.iy<'
    00000100: 7EF8 8784 527F 7820 FA78 2F0E 8669 DD5F 'x~...R xxz./i._]'
    06/09/2003 05:53:39.55 PM [03071:00010-106510] SSO API> Dumping memory
    of encoded token after decryption step [271 bytes].
    00000000: 3A75 7375 7265 3A5C 7469 6F73 6573 2D63 'u:user\:itsosec-'
    00000010: 646C 7061 632E 6D61 692E 7374 2E6F 6269 'ldap.cam.itso.ib'
    00000020: 2E6D 6F63 5C6D 333A 3938 552F 4449 443D 'm.com\:389/UID=D'
    00000030: 6948 6B6E 656C 4F2C 3D55 7250 646F 6375 'Hinkle,OU=Produc'
    00000040: 6974 6E6F 6F2C 723D 6465 6F62 6B6F 2C73 'tion,o=redbooks,'
    00000050: 3D63 7375 3125 3530 3235 3831 3733 3138 'c=us%10552183781'
    00000060: 3635 4125 4274 4669 5238 3748 4858 6C4F '56%AtBiF8RH7XHOl'
    00000070: 7A47 554F 5645 3575 7456 4172 597A 765A 'GzOUEVu5VtrAzYZv'
    00000080: 6756 314E 5374 6548 3671 7573 554E 6872 'VgN1tSHeq6suNUrh'
    00000090: 4E4B 3537 6632 6442 6A35 3161 6969 3479 'KN752fBd5ja1iiy4'
    000000A0: 2F65 5868 7261 5A7A 4D6A 5977 6E6F 715A 'e/hXarzZjMwYonZq'
    000000B0: 7868 2B43 4142 7434 7A52 5764 4B33 4E6A 'hxC+BA4tRzdW3KjN'
    000000C0: 3044 6471 4B55 4C48 7450 5772 7150 2B48 'D0qdUKHLPtrWPqH+'
    000000D0: 4655 7A33 4469 4F75 3261 4B4A 7349 5855 'UF3ziDuOa2JKIsUX'
    000000E0: 6A69 684A 5567 594D 4335 6266 3335 3256 'ijJhgUMY5Cfb53V2'
    000000F0: 6263 7034 4657 6851 6A35 7152 7636 3641 'cb4pWFQh5jRq6vA6'
    00000100: 6339 4662 4441 5A58 7248 744D 414A 3D '9cbFADXZHrMtJA='
    06/09/2003 05:53:39.56 PM [03071:00010-106510] SSO API> -LDAP Realm
    = itsosec-ldap.cam.itso.ibm.com\:389
    06/09/2003 05:53:39.56 PM [03071:00010-106510] SSO API> -Username
    = UID=DHinkle/OU=Production/o=redbooks/c=us
    06/09/2003 05:53:39.56 PM [03071:00010-106510] SSO API> -Expiration
    Ticks = 1055218378666 [06/10/2003 12:12:58 AM].
    06/09/2003 05:53:39.56 PM [03071:00010-106510] WebAuth> LOOKUP in view
    $Users (user='UID=DHinkle/OU=Production/o=redbooks/c=us')

    В этом примере обратите внимание на то, что Domino не осуществляет проверку достоверности цифровой подписи выпустившего сервера, когда определяет, что это маркер LTPA WebSphere. Domino интересует только три аспекта относительно принятого маркера LTPA:

  • факт, что маркер может быть расшифрован с применением совместно используемого секретного ключа;
  • имя пользователя (отличительное имя LDAP);
  • дату/время истечения срока действия.
  • Как правило, серверы WebSphere не имеют доступных Domino открытых/секретных ключей и, значит, без наличия общей инфраструктуры открытых ключей (PKI) для Domino не существует способа проверить достоверность цифровой подписи сервера WebSphere.

    Основным соображением относительно обеспечения безопасности при использовании LTPA в смешанной среде WebSphere-Domino является защита совместно используемого секретного ключа. Если секретный ключ был скомпрометирован, то для осведомленного относительно этого факта лица становится возможным генерировать поддельные маркеры. Несмотря на всевозможные меры относительно защиты секретного ключа, теоретически он все еще уязвим для автономных атак в том случае, если достаточное количество маркеров получено посредством выборки (с помощью сетевого сниффинга) и кто-то может определить ключ с применением взлома по методу "грубой силы" (brute force cracking). По этой причине секретный ключ на сервере WebSphere должен периодически повторно генерироваться, например каждые три месяца, после чего повторно импортироваться на другие серверы.

    7.2.2 Управление доступом

    Управление доступом с использованием LTPA основано на содержащемся внутри маркера имени пользователя. Это имя будет отличительным именем [distinguished name (DN)] из каталога LDAP, применяемым в мандате пользователя. Если DN в маркере не соответствует элементу управления доступом [к примеру, элементу таблицы управления доступом (ACL) базы данных Domino], то, если была подтверждена достоверность маркера LTPA, пользователь рассматривается как авторизованный, но он не будет иметь доступа к запрашиваемому ресурсу.

    Domino 6, а именно 6.0.2 и выше, обеспечивает чрезвычайно полезные возможности, которые позволяют устанавливать соответствие между содержащимся в маркере LTPA отличительным именем (DN) и другим именем в интересах управления доступом (осуществлять их преобразование). Сам по себе маркер LTPA не изменяется (не генерируется повторно), но аутентифицированное имя пользователя преобразовывается из отличительного имени LDAP в другое отличительное имя (DN), такое, как стандартное имя каталога Domino. Это преобразование имен происходит каждый раз, когда сервер Domino получает HTTP-запрос, в котором присутствует маркер LTPA. В связи с этим могут возникнуть некоторые непроизводительные издержки в работе сервера, вытекающие из выполнения дополнительного поиска имен. В целях ограничения до минимума потенциального количества требуемых поисков имен LDAP Domino проверяет внутренний кеш пользователя, и поэтому для уменьшения потенциального воздействия на производительность может использоваться настройка размера кеша пользователя. Мы говорим о потенциальном воздействии, так как авторы данного курса не выполняли испытаний "под нагрузкой" в целях измерения действительного влияния этого явления на производительность сервера.

    Дополнительная информация о функциях преобразования различных имен в Domino описана в разделе 11.9.4, "Преобразование имен в Domino".

    В дополнение к возможностям преобразования имен в Domino Tivoli WebSeal в связке с Tivoli Access Manager могут предоставлять функции преобразования имен на базе ресурса, к которому пользователь осуществляет попытку доступа.

    7.2.3 Решение связанных с LTPA проблем

    Если при конфигурировании инфраструктуры LTPA возникают проблемы, должны быть тщательно проанализированы значения различных параметров, связанных с LDAP. При использовании Lotus-технологий неправильная установка параметров "search filters" и "base dn" является причиной не менее 75 % связанных с LDAP-аутентификацией проблем.

    Фактически для изменения связанных с аутентификацией фильтров поиска (search filters) существует множество мест, и все из них должны быть проверены тщательным образом:

  • фильтры поиска Domino Directory Assistance;
  • фильтры поиска Sametime;
  • фильтры поиска QuickPlace;
  • фильтры поиска "global security" ("глобальной безопасности") WebSphere Application Server.
  • Пример фильтра поиска Sametime показан на рис. 7.1.

    (рис 7.1) Фильтр поиска LDAP Sametime

    Устранение связанных с LTPA проблем в Domino

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

    В NOTES.INI существует отладочная переменная, которая доступна в целях содействия в отыскании проблем с шифрованием и расшифровкой маркеров единственной подписи (Single Sign-On). Для получения информации о том, как извлекается Web SSO Configuration, а также о том, как шифруются и расшифровываются маркеры, установите DEBUG_SSO_TRACE_LEVEL=1. Для получения подробных дампов памяти, содержащих информацию о том, как шифруются и расшифровываются маркеры, установите DEBUG_ SSO_TRACE_LEVEL=2.

    Примечание. Domino 6 может иметь различные конфигурации SSO для разных служб (Web, POP и т. д.), даже на одном и том же сервере, использующем интернет-сайты. Однако, конфигурируя SSO в смешанной среде Domino 5/6, вы можете столкнуться с проблемами, так как версия 5 не распознает документы Internet Site. Хорошо, что Domino 6 все еще поддерживает "R5 Web config", и поэтому вы можете разрешить использование SSO в среде с различными версиями. Два метода конфигурации SSO на сервере Domino 6 взаимно исключают друг друга, и поэтому для смешанных сред вам надо выполнять только Web-конфигурацию версии 5. Не используйте документы Internet Site. Важными моментами здесь являются следующие:

  • Убедитесь в том, что для серверов Domino 6 на закладке Basics документа сервера запрещены (Disabled) интернет-сайты.
  • Создайте документ конфигурации SSO, используя клиент администратора Domino и открыв один из документов сервера. В строке меню выберите пункт "Create Web (R5)…" [Создать Web (R5)..] и далее SSO Configuration (Конфигурация SSO), назовите документ LTPAToken.
  • Не используйте название организации (Organization name) в документе конфигурации Web SSO (это поле применяется только для поддержки интернет-сайтов). Если вы укажете это название, документ SSO не будет виден с закладки интернет-протокола сервера.
  • 7.3 Сертификаты X.509

    Аутентификация клиента с использованием сертификатов X.509 предусматривает двустороннюю аутентификацию между пользователем браузера и сервером с применением для аутентификации пользователя как SSL, так и каталога LDAP. Множество приложений, совместно применяющих данный, одинаковый для них каталог LDAP, могут использовать одинаковую аутентификацию с применением сертификата. Это не одно и то же с использованием сертификата сервера для аутентификации сервера со стороны клиента, где клиенту просто необходимо доверять корневому центру сертификации (CA), который выпустил сертификат сервера. Мы сфокусируем внимание на выполняемой сервером аутентификации клиента.

    Как правило, сертификат X.509 клиента защищен паролем, поэтому в данном случае использование сертификатов X.509 рассматривается как двухфакторный метод аутентификации: что-то у вас есть (сертификат на рабочей станции), а что-то вы знаете (пароль). Так как сертификаты могут также быть проверены, проконтролированы на предмет аннулирования и истечения срока действия, то сертификаты X.509 могут быть очень безопасным методом аутентификации пользователей. Однако в связи с тем, что сертификат X.509 сделан переносимым (или экспортируемым) и он может быть установлен в другие приложения или на другие рабочие станции, появляются как проблемы логистики для пользователя, так и потенциальные уязвимости в безопасности. Достоин упоминания тот факт, что Internet Explorer хранит сертификаты X.509 клиента в реестре Windows. Полное удаление сертификата с рабочей станции может потребовать ручного удаления его из реестра. Только недавно получили толчок в своем развитии смарт-карты как средства, обеспечивающие как переносимость, так и безопасность в хранении сертификатов клиента, причем несмотря на то, что недостаток, связанный с отсутствием повсеместного использования устройств считывания смарт-карт в персональных компьютерах, определенно затрудняет их широкое использование.

    При аутентификации клиента клиент LDAP, а именно браузер, установленный на рабочей станции клиента, должен иметь цифровой сертификат (на основе стандарта X.509). Другими словами, сертификат X.509 содержит мандат пользователя и передается различным Web-серверам, которые требуют одинаковой аутентификации X.509. Каталогу LDAP необходимо иметь как корневой сертификат от соответствующего CA, который выпустил сертификат клиента, так и открытый SSL-сертификат клиента (ключ), который должен быть сохранен в соответствующей записи каталога. Этот цифровой сертификат используется для аутентификации клиента LDAP (браузера) по отношению к каталогу LDAP, применяемому для аутентификации. Таким образом, чтобы использовать сертификаты X.509, должна быть реализована инфраструктура интернет-сертификатов (PKI), в которой пользователи могут получать сертификаты X.509, являющиеся доверенными по отношению к службе каталога LDAP (серверу), а открытые сертификаты пользователей (ключи) хранятся в каталоге.

    В дополнение к SSL-аутентификации клиентов Web-браузеров для добавления к протоколам на основе соединений поддержки аутентификации на базе сертификатов X.509 может использоваться протокол SASL (Simple Authentication and Security Layer). Данный протокол содержит команду для идентификации и аутентификации пользователя по отношению к серверу. По выбору он может согласовывать уровень безопасности для последующего взаимодействия в рамках протокола. Если более точно, то существует как минимум семь различных типов поддерживаемой SASL аутентификации, но лишь тип аутентификации SASL "External" (Внешняя) использует сертификаты X.509. Спецификации SASL описаны в RFC-2222, который можно найти на адресу:

    http://www.ietf.org/rfc/rfc2222.txt

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

    7.3.1 Аутентификация

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

    Сейчас мы опишем последовательность аутентификации, которая выполняется с применением для аутентификации по протоколу SASL сертификатов X.509v3. Во время протокольного обмена в рамках аутентификации механизм SASL выполняет аутентификацию, передавая личность авторизации [известную как идентификатор пользователя (userid)] от клиента к серверу и договариваясь об использовании определенного механизмом уровня безопасности.

    Когда сервер LDAP получает от клиента запрос связывания LDAP, он обрабатывает запрос следующим образом:

  • Сервер анализирует запрос связывания LDAP и осуществляет выборку из него следующей информации:
  • отличительное имя (DN), с применением которого клиент предпринимает попытку пройти аутентификацию;
  • используемый метод аутентификации;
  • какое-либо содержащееся в запросе удостоверение личности (мандат), такое, как пароль;
  • если методом аутентификации является SASL, сервер производит также выборку из запроса связывания LDAP названия используемого механизма SASL.
  • Сервер нормализует отличительное имя, извлеченное из запроса.
  • Сервер извлекает какие-либо содержащиеся в запросе связывания LDAP элементы управления LDAP.
  • Если методом аутентификации является SASL, сервер определяет, поддерживается или нет указанный в запросе механизм SASL. Если механизм SASL не поддерживается сервером, то сервер отправляет клиенту код возврата ошибки и завершает процесс связывания.
  • Если механизм SASL поддерживается ( =EXTERNAL ) и тип аутентификации SSL является аутентификацией сервера и клиента, то сервер подтверждает, что сертификат клиента является действительным, был выпущен известным CA и в цепочке сертификатов клиента не существует недействительных или аннулированных сертификатов. Если пароль и отличительное имя клиента, как указано в ldap_sasl_bind, не имеют значения NULL, то затем для последующих операций LDAP в качестве аутентифицированной личности используется отличительное имя (DN), содержащееся внутри сертификата X.509v3 клиента. В противном случае либо клиент аутентифицируется анонимно (если DN и пароль имеют значение NULL), либо клиент аутентифицируется на основании предоставленной клиентом информации связывания.
  • Если методом аутентификации является Simple (Простой), то сервер осуществляет проверку на предмет того, представлено ли DN пустой строкой, либо на предмет того, что не представлен мандат пользователя.
  • Если DN представлено пустой строкой или если не определено имя (DN) либо не определен мандат, сервер предполагает, что клиент связывается анонимно и возвращает клиенту положительный результат. Для такого соединения DN и метод аутентификации остаются со значениями NULL и LDAP_AUTH_NONE соответственно.
  • Если для клиента не была заблаговременно установлена связь и в процессе операции связывания он не представил сертификат, то соединение отклоняется.
  • 7.3.2 Управление доступом

    Использование сертификатов клиента X.509 для SSL-аутентификацииЗдесь ошибка: имеется в виду SASL-аутентификация. клиента, как правило, очень жестко по отношению к аутентифицируемому имени. DN в сертификате клиента является именем, под которым проходит аутентификацию пользователь. Таким образом, представленное в сертификате отличительное имя DN должно быть именем, используемым элементами управления доступом к приложениям.

    SASL поддерживает такое свойство, как прокси-авторизация (proxy authorization), которое позволяет аутентифицированным пользователям осуществлять запрос выполнения ими действий от лица другого пользователя. Этот шаг происходит после того, как пользователь получает отличительное имя (DN) аутентификации, и влечет за собой отправку серверу личности авторизации. После этого сервер примет решение относительно того, разрешать или нет прохождение авторизации. Если авторизация разрешена, то LDAP-соединение пользователя переключается на применение связанного DN, полученного из личности авторизации, а сеанс LDAP продолжается с применением доступа от лица нового отличительного имени (DN) авторизации.

    7.4 DSAPI

    Интерфейс прикладного программирования Web-сервера Domino [Domino Web Server Application Programming Interface (DSAPI)] является интерфейсом прикладного программирования на языке С (C API), который позволяет вам писать свои собственные расширения к Web-серверу Domino. Расширения DSAPI, или фильтры, уведомляются всякий раз, когда по время обработки HTTP-запроса происходит определенное событие. Сам по себе DSAPI не является методом SSO, скорее он является частью инструментария разработки, который может применяться для конструирования в интересах Domino пользовательского механизма SSO.

    Обратите внимание на то, что некоторые бизнес-партнеры IBM Lotus предлагают как стандартные, так и пользовательские решения для Web-аутентификации пользователей с применением DSAPI на основе инструментария интерфейса прикладного программирования на языке С Domino 6. За дополнительной информацией обратитесь к Web-сайту компании IBM.

    Фильтр DSAPI позволяет вам настраивать обработку HTTP-запроса при возникновении определенных событий, например когда пользователь осуществляет доступ к ресурсу на сервере первый раз и вы желаете использовать специальную обработку данных аутентификации вместо обычной Web-аутентификации Domino. Процесс применяет набор предопределенных типов событий. Стек HTTP уведомляет фильтр DSAPI o событиях, после чего определенная разработчиком DSAPI логика принимает решение о том, что делать по факту наступления события. В настоящее время после события StartRequest существует 13 событий, которые могут быть перехвачены фильтром DSAPI. В зависимости от конструкции и ее реализации фильтр может поддерживать либо одно событие, либо некоторое их количество.

    Реализация интерфейса DSAPI зависит от того, индикацию ("регистрацию") каких из событий фильтр поддерживает. Итак, фильтр получает от менеджера соединений стека уведомления только о тех событиях, о поддержке которых он заявил. Рис. 7.2 отображает, где фильтр DSAPI вступает в действие на HTTP-сервере Domino относительно другой обработки данных на Web-сервере.

    (рис 7.2) Технологический процесс обработки стека интернет-протокола Domino 6

    В общем, события происходят в определенной последовательности. Они отражаются на состоянии стека HTTP на каждом из его шагов по обработке данных. Уведомления о событиях могут рассматриваться как возможность фильтрации (или фильтры) для изменения реализации по умолчанию для заданного шага обработки данных. При каждом событии процедуре обработки уведомления о сообщении фильтра передается структура, которая содержит дополнительную информацию и в большинстве случаев дополнительные функции обратного вызова. Фильтр может запрашивать функции обратного вызова для получения дополнительной информации или для выполнения определенной услуги. Процедура уведомления о событии вызывается только для тех событий, для которых зарегистрирован фильтр (тех, которые передаются в структуре Filter Init Data, когда фильтр загружен и проинициализирован). Типами методов запроса HTTP, при которых могут быть инициированы события, являются:

  • Нет метода: метод запроса HTTP не предусмотрен.
  • HEAD: метод HEAD часто используется для тестирования гипертекстовых ссылок в целях проверки достоверности, доступности и недавней модификации.
  • GET: метод GET используется для выполнения выборки любой информации (в форме объекта), идентифицированной посредством Request-URL (URL-запроса).
  • POST: метод POST требует, чтобы исходный сервер принимал объект, содержащийся в запросе, как новую субординантную информацию для ресурса, который идентифицирован посредством Request-URL в Requst-Line (Строка-статус).
  • PUT: метод PUT требует, чтобы содержащийся в запросе элемент был сохранен по представленному Request-URL.
  • DELETE: метод DELETE требует, чтобы исходный сервер удалил ресурс, идентифицированный посредством Request-URL.
  • TRACE: метод TRACE.
  • CONNECT: метод CONNECT.
  • OPTIONS: метод OPTIONS.
  • UNKNOWN: неизвестный метод запроса.
  • BAD: неверный метод запроса. Ошибка.
  • Типы событий описаны в последующих разделах в порядке их возникновения.

    Событие kFilterStartRequest

    Это событие используется для того, чтобы информировать все загруженные в текущий момент фильтры о том, что запрос HTTP был принят и вскоре будет обрабатываться. На этом шаге фильтр может подготовиться к обработке запроса. Как правило, на этом шаге фильтр должен распределить свои собственные данные секретного контекста и требуемые ресурсы, необходимые для управления обработкой запроса. Параметр pEventData не используется, передается NULL. Любой фильтр, поддерживающий это событие, должен возвращать значение kFilterHandledEvent.

    Событие kFilterRawRequest

    Все фильтры, загруженные на данный момент и поддерживающие это событие, уведомляются о том, что были изучены все входящие заголовки HTTP. Любой фильтр, которому необходима предварительная обработка входящих заголовков, может сделать это в данный момент времени. Обратите внимание на то, что в данный момент времени фильтр мог бы выбрать полное обслуживание запроса HTTP. Параметр pEventData является указателем на структуру FilterRawRequest.

    Событие kFilterParsedRequest

    Все фильтры, загруженные на данный момент и поддерживающие это событие, уведомляются о нем, когда стек HTTP заканчивает предварительный анализ всех входящих заголовков HTTP. Обратите внимание на то, что это отражает состояние, аналогичное состоянию в событии kFilterRawRequest, так как стек HTTP предварительно анализирует входящие заголовки HTTP перед тем, как начнет вызывать какой-либо фильтр. На этом шаге для полной обработки запроса вновь может быть выбран любой фильтр. Параметр pEventData является указателем на структуру FilterParsedRequest. Обратите внимание на то, что предусмотрены только две функции обратного вызова. На этом шаге вы можете получить доступ только к входящим заголовкам HTTP. Вы также имеете возможность изменить их с помощью kFilterRawRequest.

    Событие kFilterRewriteURL

    Все фильтры, загруженные на данный момент и поддерживающие это событие, имеют возможность изменить URL-адрес для перенаправления запроса на некий другой ресурс. Если фильтр успешно переписывает URL-адрес для обработки и сервер обрабатывает этот новый URL-адрес, то после этого на уровне DSAPI обработка данного события заканчивается, а это означает, что другие фильтры в списке не будут уведомляться. Параметр pEventData является указателем на экземпляр структуры FilterMapURL. Обратите внимание на тот факт, что FilterMapURL используется также в таких событиях, как kFilterTranslateRequest и kFilterPostTranslate.

    Событие kFilterAuthenticate

    Это событие происходит, когда стек HTTP находится в фазе аутентификации процесса. Код фильтра способен осуществить просмотр запроса и мандата пользователя, произвести аутентификацию пользователя по отношению к стеку HTTP или полностью обработать запрос. Параметр pEventData является указателем на экземпляр структуры.

    Событие kFilterUserNameList

    Это событие происходит, когда стек HTTP близок к генерированию списка имен групп пользователя. Это имена групп, членами которых является пользователь. Данное событие следует за событием kFilterAuthenticate. Этот фильтр может либо устанавливать, что сервер Domino заполняет список, добавляет или удаляет группы из списка, либо полностью обрабатывать событие (полностью самостоятельно генерировать список групп). Параметр pEventData в функции HttpEventProc является указателем на структуру FilterUserNameList.

    Событие kFilterTranslateRequest

    Это событие происходит, когда стек HTTP близок к преобразованию URL-адреса пути в целевой ресурс. Фильтр может либо преобразовывать запрос с использованием своих собственных правил преобразования и построения соответствий, либо полностью обрабатывать запрос. Параметр pEventData является указателем на экземпляр структуры FilterMapURL.

    Событие kFilterPostTranslate

    Это событие происходит после того, как было обработано событие kFilterTranslateEvent. Для фильтра это возможность изменить целевой ресурс, к которому осуществляется доступ. Фильтр может изменять как путь целевого ресурса, так и тип построения соответствий. Фильтр может также выбрать полное обслуживание запроса. Параметр pEventData является указателем на экземпляр структуры FilterMapURL.

    Событие kFilterAuthorized

    Это событие происходит после того, как имела место фаза аутентификации и был вычислен список имен групп пользователя. Фильтр может отвергнуть реализацию фазы авторизации по умолчанию и либо предоставить доступ к целевому ресурсу либо отказать в нем. Параметр pEventData является указателем на структуру FilterAuthorize. Она содержит информацию об используемом целевом ресурсе. Обратите внимание на тот факт, что фильтр может получить доступ к информации аутентифицированного пользователя путем применения служб при помощи функции обратного вызова ServerSupport с установленным флагом kGetAuthenticatedUserInfo. Это даст возможность пользователю получить доступ к аутентифицированному имени пользователя, а также к его или ее списку имен групп.

    Если фильтр отказывает в доступе к целевому ресурсу, он должен отправить клиенту соответствующий ответ и установить поле isAuthorized структуры FilterAuthorize в значение 0. После этого он может вернуть либо kFilterHandledRequest, либо kFilter-HandledEvent. После этого на уровне DSAPI стеку HTTP будет подан сигнал на завершение обработки текущего запроса.

    Событие kFilterProcessRequest

    Это последний шаг в обслуживании запроса HTTP. Это событие может быть использовано для отклонения реализации обработки запроса по умолчанию. На этой стадии данные для ответа вычисляются и отправляются клиенту. Параметр pEventData является указателем на структуру FilterMapURL.

    Событие kFilterEndRequest

    Это событие используется для информирования кода фильтра о том, что наступило время для обновления и освобождения ресурсов, выделенных для обработки заданного запроса HTTP. Параметр pEventData в этом случае имеет значение NULL.

    Событие kFilterAuthUser

    Это событие заменено событием kFilterAuthenticate, но все еще поддерживается для обеспечения совместимости с написанными ранее фильтрами DSAPI. При этом событии фильтр осуществляет аутентификацию Web-пользователя. Параметр pEventData является экземпляром структуры FilterAuthenticate. Использование приведено в описанном ранее событии kFilterAuthenticate.

    Это событие позволяет вам осуществлять настройку аутентификации Web-пользователей, которая зачастую является единственной частью реализации принципа единого входа в корпорации. В этом случае фильтр DSAPI уведомляется, когда Domino осуществляет аутентификацию пользователя. После этого фильтр DSAPI может проанализировать имя пользователя, проверить достоверность имен пользователей и паролей по отношению к действующей основной системе и, если проверка прошла успешно, уведомить Web-сервер Domino, что он обрабатывал аутентификацию пользователя, а также вернуть Domino мандат пользователя.

    Далее приведено руководство по настройке выходных переменных и кодов возврата для общих сценариев аутентификации, когда eventData указывает на структуру FilterAuthenticate.

    Сценарий 1. Фильтр был способен провести аутентификацию пользователя.

    Установите eventData > authName в каноническое имя, установите eventData > authType в kAuthenticBasic или kAuthenticClientCert, а код возврата в kFilterHandledEvent.

    Сценарий 2. Фильтр был неспособен провести аутентификацию пользователя, а другие фильтры или Domino должны двигаться вперед и предпринимать попытки проведения своей собственной аутентификации.

    Установите код возврата в kFilterNotHandled.

    Сценарий 3. Фильтр был неспособен провести аутентификацию пользователя, а другие фильтры или Domino не должны предпринимать попытки проведения своей собственной аутентификации.

    Установите eventData > authType в kNotAuthentic, а код возврата в kFilterHandledEvent.

    Событие kFilterResponse

    Это событие происходит, когда стек HTTP близок к отправке заголовков ответа HTTP клиенту. Это дает фильтру шанс изменить отправляемый клиенту ответ. Данное явление не полностью реализовано в текущей версии DSAPI. Параметр pEventData является указателем на экземпляр структуры FilterResponse.

    Событие kFilterRawWrite

    Это событие происходит, когда стек HTTP близок к отправке данных ответа HTTP клиенту. Это дает фильтру шанс изменить отправляемые клиенту данные ответа. Это не полностью реализовано в текущей версии DSAPI. Параметр pEventData является указателем на экземпляр структуры FilterRawWrite.

    Из описанных здесь событий для конструирования пользовательской реализации SSO мы заинтересуемся главным образом событиями kFilterAuthenticate, kFilterUserNameList и kFilterAuthorized. Обратите внимание на тот факт, что вместо события kFilterAuthenticate может также использоваться kFilterAuthUser, хотя оно и является событием версии 5, которое поддерживается в Domino 6 в целях обеспечения обратной совместимости. Новые фильтры DSAPI должны использовать событие kFilterAuthenticate.

    Анализ работы и программирования

    Функции DSAPI включены в инструментарий Lotus C API Toolkit, который может быть загружен с адреса:

    http://www.lotus.com/ldd

    Фильтр DSAPI скомпонован как общая библиотека (shared library) под UNIX и как DLL-файл под Win32. DSAPI поддерживается во всех платформах серверов Domino. Так как фильтр написан на языке С, вы можете использовать API языка С Notes для доступа к данным Domino либо другие интерфейсы С для доступа к другим системам. Детали компиляции и компоновки общей библиотеки отличаются в зависимости от платформы. Обратите внимание на тот факт, что инструментарий API языка С Lotus для Domino 6 не является обратносовместимым, означая тем самым, что программы, разработанные с применением инструментария 6.х, не будут работать в предшествующих шестой версиях Domino. Если вы имеете среду Domino R5 или смешанную среду R5 и Domino 6, вы должны использовать инструментарий R5.x.

    Фильтр DSAPI является серверным расширением, и поэтому при доступе к базам данных Domino посредством API языка С фильтр имеет привилегии ID сервера.

    Так как функции уведомления фильтра могут быть вызваны одновременно из различных потоков сервера, все коды фильтров должны быть защищены по потоку. Когда поток сервера Domino получает запрос HTTP, он выделяет память под новый экземпляр структуры FilterContext. Когда поток обработает запрос, он передает этот экземпляр всем функциям фильтра, которые он вызывает. FilterContext содержит указатель privateContext, который вы можете использовать для хранения своей собственной структуры данных. Все специфические данные потока, которые фильтру необходимо обслуживать от события к событию, должны сохраняться в вашей структуре privateContext.

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

    Установите фильтр посредством указания имени фильтра в записи Server поля имени файла фильтра DSAPI в пунктах меню Internet Protocols (интернет-протоколы) > HTTP table (Таблица HTTP). Вы можете указать только имя файла фильтра, если он расположен в каталогах программ или данных Domino; в противном случае вы должны указать полное имя файла. Убедитесь в том, что всем файлам фильтров обеспечена безопасность посредством соответствующих файловых разрешений и обеспечения физической безопасности в целях предотвращения подделки фильтра со стороны неавторизованных пользователей.

    DSAPI и LTPA

    Инструментарий API языка С Domino 6 предоставляет для работы с маркерами LTPA две функции:

  • SECTokenValidate – проверка достоверности маркера LTPA SSO;
  • SECTokenGenerate – генерирование маркера LTPA SSO.
  • Эти две функции соответствуют расшифровке и шифрованию маркеров LTPA, описанных ранее в разделе, посвященном LTPA.

    7.4.1 Аутентификация

    DSAPI обеспечивает достаточную гибкость для аутентификации Web-пользователя Domino с применением практически любого критерия. Такой критерий может основываться на сравнении имени и пароля в Domino или во внешнем каталоге LDAP, на сравнении представленного в cookie имени или на каком-либо другом механизме. Вместе с большой гибкостью присутствуют и издержки, связанные с обеспечением безопасности используемого механизма. Решать проблему таких издержек приходится разработчику DSAPI. Другая потенциальная проблема и издержки связаны с производительностью. К примеру, если DSAPI требуется соединение с каталогом из внешней области, то время поиска может чрезмерно влиять на производительность. Разработчик может либо предпочесть проверку кеша пользователя, либо игнорировать кеш и производить внешний поиск при каждом случае доступа.

    7.4.2 Управление доступом

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

    Разработчик способен предоставить полный контроль относительно того, как пользовательское имя может преобразовываться или ставиться в соответствие другому имени посредством установки "authname" в любое желаемое значение и формат. См. описанный ранее сценарий 1 для события kFilterAuthUser.

    7.5 Заголовки HTTP

    Для ID пользователей и паролей Domino 6 поддерживает заголовки HTTP, что позволяет вам применять сторонний Web-сервер в качестве входного для сервера Domino. Это свойство часто описывается как WebSphere Application Server plug-in (Плагин сервера приложений WebSphere) для Domino, что является отчасти дезориентирующим названием, так как это не то же самое, что и плагин (plug-in) аутентификации или Перехватчик доверительных связей [Trust Association Interceptor (TAI)] сервера приложений WebSphere, и также это не включает в себя плагин Domino, так как это только параметр файла notes.ini, который сообщает HTTP Domino о приеме в заголовках HTTP ID пользователей и паролей, относящихся по стилю к серверу приложений WebSphere. Реальный плагин для поддержки этой архитектуры SSO установлен на входном HTTP-сервере. Плагины для входных HTTP-серверов, которые совместимы с внутренними серверами Domino, доступны для Microsoft IIS и IBM HTTP Server, а в будущих редакциях Domino 6 планируется поддержка таких плагинов для Apache и iPlanet.

    В целях поддержания принципа единого входа с применением заголовков HTTP на внутреннем сервере Domino, добавьте в файл NOTES.INI следующую строку:

    HTTPEnableConnectorHeaders=1

    Этот параметр позволяет задаче HTTP Domino обрабатывать специальные заголовки, добавленные к запросам плагином сервера приложений WebSphere для IIS или для IBM HTTP Server. Такие заголовки включают информацию о конфигурации входного сервера и о статусе аутентификации пользователей.

    В качестве меры безопасности задача HTTP Domino игнорирует эти заголовки в том случае, если параметр файла NOTES.INI не разрешен. Это предотвращает имитацию плагина со стороны атакующего.

    Необходимо понимать, что при использовании этой архитектуры для обеспечения безопасности канала между входным HTTP-сервером и сервером Domino должны быть использованы брандмауэры и ограничения по портам; в противном случае сервер Domino подвергается риску, потому что заголовки HTTP могут легко быть подделаны. Другими словами, обеспечьте безопасность канала "HTTP-сервер – HTTP Domino" таким образом, чтобы только HTTP-серверу было разрешено подключаться к порту Domino 80/443. Целостность этой архитектуры SSO полностью зависит от безопасности канала между производящим аутентификацию входным HTTP-сервером и сервером Domino.

    7.5.1 Аутентификация

    При использовании поддержки плагина заголовков HTTP в Domino, последний возлагает обязанности по проведению аутентификации всех пользователей на входной HTTP-сервер.

    7.5.2 Управление доступом

    Элементы управления доступом Domino при использовании для аутентификации заголовков HTTP зависимы от имен пользователей, предоставленных плагином на внешнем Web-сервере. Списки управления доступом (ACL) баз данных Domino по-прежнему используются для определения того, должен ли быть предоставлен пользователю доступ к заданному ресурсу. Так как аутентифицированное имя пользователя в заголовке обычно не является иерархическим именем Notes пользователя, то списки управления доступом баз данных должны содержать элементы, которые соответствуют предполагаемой форме имени пользователя в заголовке. Общим подходом при решении этой проблемы является разрешение анонимного доступа к базам данных Domino и доверие аутентификации и элементам управления доступом входного сервера, которые определены в его реестре безопасности для URL-адресов Domino.

    Главным недостатком этого подхода является невозможность реализации элементов управления доступом на уровне документов, таких, как осуществление доступа к документам с правами читателя (reader) или автора (writer). Аналогично не могут быть использованы элементы управления доступом на уровне полей, такие, как формулы hide when (скрыть когда) в форме Domino, которые используют принадлежность к группам или роли групп. Так как документы Domino получают сгенерированные идентификаторы (ID документов и UNID), то непрактично пытаться осуществлять доступ и управлять им с применением URL-адресов.

    Для преобразования имени пользователя из заголовка HTTP в иерархическое имя Notes может быть реализовано преобразование имен Notes. Так как обычно иерархическое имя Notes – это то, что применяется в ACL базы данных Domino, то для этого могут быть использованы списки управления доступом (ACL) Domino, обеспечивая тем самым соответствие требуемым для поддержки преобразования имен условиям. Дополнительную информацию относительно того, как Domino может преобразовывать имя из внешнего каталога LDAP в иерархическое имя Notes, можно найти в разделе 11.9.4, "Преобразование имен в Domino".

    7.6 Сценарий единого входа (принципа единственной подписи)

    Для выделения и демонстрации производительности и важности решения по обеспечению единого входа в этом разделе предусмотрено подробное обсуждение на высоком уровне одного потенциального сценария SSO. Более подробный сценарий предельно безопасного объединенного решения представлен в части 4, "Безопасный сценарий".

    При базовом сценарии SSO, который мы здесь описываем, существует объединенная инфраструктура на основе Domino, составленная из Lotus Domino и Lotus Sametime, в зависимости от которой организация принимает решение о реализации среды портала WebSphere. Для обеспечения общей связки технологий выбирается вариант SSO с применением LTPA, после чего он подлежит реализации в целях предоставления непрерывного взаимодействия с пользователями.

    Сейчас мы изучим, как бы эта новая инфраструктура функционировала, причем сначала рассмотрим основные операции взаимодействия между пользователем и сервером портала, как это показано на рис. 7.3.

    (рис 7.3) Взаимодействие браузера и портала при использовании SSO с применением LTPA

    На шаге "1-Аутентификация" пользователь осуществляет запрос портала и предоставляет набор полномочий аутентификации (мандат). После этого сервер портала проверяет мандат (2) и при условии успешной аутентификации (3) создает маркер LTPA. Затем этот маркер LTPA не только передается обратно браузеру клиента (4), но и размещается в службе мандатов портала (5).

    Далее для демонстрации того, как этот "кешированный" маркер LTPA может быть использован порталом, мы рассмотрим операции взаимодействия системы, представленные на рис. 7.4.

    (рис 7.4) Взаимодействие портала и Domino при использовании SSO с применением LTPA

    В этом наборе операций взаимодействия клиент в лице браузера запрашивает портлет Domino с сервера портала (1). Сервер портала знает, что для получения данных для портлета он должен осуществить доступ к Domino от имени пользователя, и поэтому он обращается к серверу мандатов и осуществляет выборку маркера LTPA, который был кеширован для пользователя по исходному регистрационному имени (2 3). После этого портал отправляет Domino запрос с маркером LTPA (4). При доверии со стороны Domino маркеру LTPA производится проверка по ACL для запрашиваемого ресурса на основе имени пользователя из маркера LTPA (5). При условии, что пользователь авторизован, Domino отправит данные назад серверу портала (6), который затем предоставляет их обратно пользователю как часть изначально запрошенного портлета.

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

    Наконец, на рис. 7.5 мы имеем одну финальную схему для демонстрации взаимодействия в рамках SSO с применением LTPA. В данном случае использующий браузер пользователь запрашивает портлет Web-конференции Sametime (1). Снова сервер портала знает, что для получения списка встреч (meeting) для портлета он должен осуществить доступ к Sametime от имени пользователя, и поэтому он обращается к серверу мандатов и осуществляет выборку маркера LTPA, который был кеширован для пользователя по исходному регистрационному имени (2 3). После этого портал отправляет Sametime запрос с маркером LTPA (4). При доверии Sametime маркеру LTPA производится проверка по ACL для списка встреч на основе имени пользователя из маркера LTPA (5). При условии, что пользователь авторизован, Sametime отправит данные назад серверу портала (6), который затем предоставляет данные обратно пользователю как часть изначально запрошенного портлета Web-конференции (7).

    (рис 7.5) Взаимодействие браузера, портала и Sametime при использовании SSO с применением LTPA

    При условии, что после этого пользователь изъявит желание присутствовать на встрече, браузер начнет непосредственно взаимодействовать с сервером Sametime (8), который может запросить у пользователя браузера его мандат (9). После этого браузер ответит предоставлением маркера LTPA из своего кеша (10) и начнется установка встречи (11).

    Будем надеяться, этот пример помог продемонстрировать мощь однородного решения по организации единого входа, особенно в случае использования объединенной портальной инфраструктуры.

    7.7 Краткие выводы

    Мы обсудили четыре основных метода для поддержки SSO в случае применения объединенных технологий Lotus на базе Lotus Domino. Эти методы различаются в плане проблем обеспечения безопасности и сложности проектирования.

    LTPA имеет преимущество, выражающееся в поддержке со стороны практически всех программных продуктов IBM Lotus, WebSphere и Tivoli Access Manager. Этот метод является зависимым от общего, доверенного каталога, используемого в интересах мандатов пользователей. Возможность поддержки каталогов Domino (Domino's Directory Assistance) обеспечивает поддержку использования мандатов, сохраненных за пределами каталога Domino.

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

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

    Заголовки HTTP имеют преимущество, выражающееся в относительной легкости реализации; однако они приносят высокую степень риска для безопасности, если канал между входным HTTP-сервером и внутренним сервером Domino является не полностью безопасным. В большинстве случаев они реализуются в связке с системой управления доступом организации (Enterprise Access Management), которая централизованно управляет всем доступом к Web-ресурсам.

    Наконец, при принятии решения относительно выбора одного или другого метода SSO пользователь должен рассмотреть, возможно ли будет:

  • Попытаться произвести объединение с существующим решением SSO, либо построенным по техническим условиям заказчика, либо не являющимся решением от компании IBM. Весьма правдоподобно, что в этом случае отвечать всем требованиям будут решения либо на основе DSAPI, либо на основе заголовков HTTP.
  • Попытаться реализовать "специфическое для приложения" решение SSO либо произвести объединение с другими существующими приложениями от компании IBM. В этом случае наибольшим смыслом будет обладать применение решения на основе LTPA.
  • Попытаться реализовать общее для всей организации решение SSO, покрывающее все системы и инфраструктуры. В этом случае правильным направлением может быть использование решения по управлению доступом в организации как части общего решения по управлению подлинностью. Для удовлетворения этих потребностей должно быть внимательно проанализировано и принято во внимание семейство программных продуктов "управления подлинностью (identity management)" Tivoli от компании IBM.
  • Страницы:

    Начнем с представления более строгого определения SSO:

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

    Это определение взято с Web-сайта компании The Open Group по адресу:

    http://www.opengroup.org/

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

    Этот подход предполагает появление определенного количества важных преимуществ, но имеет также и некоторые недостатки. Преимуществами для конечных пользователей являются следующие положения:

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

  • Запись регистрационных данных пользователя в одном месте для управления и обеспечения безопасности.
  • Возможность ведения общих для организации политик паролирования и обеспечения безопасности, позволяющих обеспечить "сквозную" безопасность, возможно в рамках приложений и систем. Это позволит избежать проблем с несоответствием требований по сложности паролей и периодам их смены в различных системах.
  • Проще контролировать информацию о правах доступа пользователя (user security information) и при необходимости корректировать ее, чем при отслеживании всех отдельных систем, к которым имеет доступ пользователь. Это особенно важно, когда пользователям назначают роли с другими уровнями доступа.
  • Потенциальные недостатки SSO:

  • попытка первоначальной реализации может быть сложной, в зависимости от количества существующих несопоставимых систем;
  • скомпромитированные входные данные (credentials) пользователя могут привести к доступу к большому числу приложений;
  • производитель либо не использует существующий открытый стандарт, либо использует стандарты, несовместимые со стандартами, используемыми другими приложениями.
  • Сложность обеспечения SSO связана с функционированием в средах с независимыми архитектурами безопасности, директориями и т. д. для каждой из существующих платформ приложений. Для поддержки SSO нам необходимо заставить все наши приложения использовать общую инфрастуктуру безопасности для сквозной аутентификации между приложениями. Это требует некоторого общего формата для представления аутентификационной информации и параметров доступа пользователя ( credentials ), которые могут понять и правильно обработать ( accept ) все приложения. Также нам нужно иметь возможность проверить достоверность параметров доступа пользователя ( credentials )

    C технической точки зрения существует несколько различных методов, или инструментов, которые могут быть использованы, чтобы обеспечить пользователям возможность использования SSO в приложениях, написанных под WebSphere и Lotus. В этой лекции описаны методы обеспечения SSO, которые поддерживают программные продукты компании IBM:

  • заголовки HTTP (HTTP headers);
  • Lightweight Third Party Authentication (LTPA);
  • сертификаты X.509;
  • DSAPI.
  • 7.1 Методы SSO

    Все методы SSO должны быть направлены на решение трех проблем:

  • Аутентификация пользователя.
  • Установление соответствующих уровней доступа к приложениям на основе идентификационных данных пользователя.
  • Перевод удостоверения личности (users credentials) пользователя в формат, узнаваемый другими приложениями.
  • В этом разделе мы обсудим четыре основных метода, используемых для поддержки SSO со стороны различных серверов и приложений. Для каждого из методов SSO мы опишем технические функции, а также специфические проблемы и зависимости, связанные с каждым отдельным методом.

    7.1.1 Единый пароль или SSO

    Обратите внимание на то, что мы проводим различие между понятием SSO и понятием "единого пароля", которое фундаментально отличается от SSO. Единый пароль подразумевает наличие одинакового ID пользователя и пароля [мандата ( credentials )], хранящихся во множестве мест для использования различными приложениями. При таком сценарии у пользователей запрашивалась бы аутентификация для каждого приложения (или сервера), к которым они осуществляют доступ, несмотря на то, что теоретически они бы использовали для этого одни и те же ID и пароль.

    Чтобы иметь единый пароль несмотря на то, что каждое приложение использует специализированное хранилище для ID и пароля ( credentials store ), идентификаторы ( ID ) пользователей и пароли должны быть каким-то образом синхронизированы. Так как же можно синхронизировать пароли в различных хранилищах (каталогах)? Самый простой ответ, это пользователи могут вручную поддерживать идентичность своих logon-имен и паролей для различных систем, если у них есть на это соответствующие полномочия. Конечно, это без сомнения, самый недружелюбный к пользователю подход, потому что нагрузка в этом случае полностью ложится на него. Могут ли пароли быть синхронизированы программно? В некоторых случаях могут, хотя на самом деле процесс синхронизации представляет из себя одновременную смену паролей.

    Одновременные изменения паролей

    Большинство процессов "синхронизации" паролей технически являются процессом одновременного изменения паролей, происходящим в фоновом режиме. К примеру, если вы разрешили синхронизацию паролей Notes и Windows, то при изменении вами своего пароля в Notes введенный новый пароль временно сохраняется в буфере, после чего автоматически передается процессу изменения пароля Windows в фоновом режиме. Процесс очень похож на процесс синхронизации пароля Notes и Domino интернет-паролей. Одновременное изменение эффективно там, где вам необходимо набрать пароль только один раз, и он автоматически будет передан второй парольной системе.

    Синхронизация паролей

    С точки зрения обеспечения безопасности, возможность синхронизации значения пароля из хранилища, непременно связано с возникновением очень нежелательных слабых мест в системе безопасности. Слабым местом в этом случае была бы возможность извлечения версии пароля пользователя в виде открытого текста для того, чтобы его можно было записать в другой каталог. Безопасные хранилища входных данных не хранят пароль в виде открытого текста, скорее они хранят хеш или зашифрованную версию пароля. Алгоритм хеширования не должен быть реверсивным. Так, чтобы у нас не было возможности прочитать из каталога значение хеша и конвертировать его в текст. А если мы просто перепишем хешированый пароль из одного каталога в другой, то второй каталог будет иметь "хеш"-значение пароля, которое не сможет быть воспроизведено в исходный пароль, и поэтому никогда не пройдет процесс аутентификации или "связывания" ( "bind" ).

    Примечание. Domino генерирует MD2-solted хеш при сохранении интернет-пароля в документе Person, если в профиле каталога (Directory Profile) разрешена опция "Use more secure Internet Passwords" ("Использовать более безопасные интернет-пароли"). Другие каталоги могут применять другие алгоритмы хеширования (к примеру, IBM Tivoli Directory Server использует MD5). Также они будут использовать другие ключи шифрования, длины ключей и salt -значения. Значения хеш для одного и того же пароля в разных каталогах будут различными (и разных записей пользователя в том же каталоге, если они используют salted хеш). Значение(величина) хеш не подразумевает переносимости

    Если каталог предусматривает доступ администратора или программы для получения пароля в виде открытого текста, это не является безопасным.

    Процесс связывания

    Для понимания проблемы паролей и факта хранения хешированного значения пароля в "безопасных" каталогах, вам необходимо понять процесс аутентификации. Когда пользователь предоставляет регистрационное имя ( ID ) и пароль, строка пароля хешируется и затем сравнивается с значением хеша сохраненного в каталоге. Хорошим примером этого процесса является bind -запрос протокола LDAP, при использовании LDAP для хранения ID и пароля ( credentials ). Если полученный после ввода имени и пароля пользователя хеш соответствует хеш, сохраненному в каталоге, считается что "связывание" ( "bind" ) прошло успешно. Несмотря на то, что некоторые каталоги хранят как исходный пароль, так и его хеш-значение, безопасные каталоги не подразумевают доступ к исходному паролю; вы можете получить доступ только к хеш.

    Рассмотрим следующий пример.

    Пароль пользователя состоит из строки символов "password" и сохранен в IBM Directory Server как хеш-значение "[B@7a8ea817". Что случится, если мы попытаемся синхронизировать это хеш-значение с документом Person пользователя в каталоге Domino? Хеш-значение, которое сгенерирует наш сервер Domino когда мы войдем (log in) ( bind ) с паролем "password", будет выглядеть как "355E98E7C7B59BD810ED845AD0FD2FC4". Так как это значение не идентично хеш-значению из каталога LDAP, с которым мы синхронизировались ( "[B@7a8ea817" ), аутентификация с Domino будет неудачной.

    Применение единого пароля и синхронизации паролей является подходом, который минимально пригоден для, возможно, двух различных клиентов, таких как пароли Notes и Windows. Это не тот подход, который мы рекомендуем для интеграции браузерных приложений. В оставшейся части этой лекции внимание будет сфокусировано на принципе единого входа (SSO) для Web-клиентов.

    7.2 LTPA

    Маркеры Lightweight Third Party Authentication (LTPA) компании IBM, или cookies, обеспечивают средства совместного использования информации аутентификации между Web-серверами приложений Lotus, WebSphere и Tivoli. Пользователь, который однажды уже был подвергнут аутентификации со стороны сервера приложений, будет автоматически аутентифицирован на других серверах приложений в том же домене DNS при предоставлении ключей LTPA, находящихся в совместном использовании у всех приложений. LTPA применяет маркер, который сохраняется как cookie в браузере пользователя.

    Маркер LTPA содержит данные, которые уникально идентифицируют пользователя, такие, как отличительное имя [Distinguished Name (DN)] пользователя и датa истечения срока действия, которая фактически ограничивает время сеанса до значения, когда пользователь будет вынужден повторно пройти аутентификацию.

    Особые примечания относительно использования LTPA включают:

  • Все серверы приложений, использующие маркеры LTPA, должны находиться в одном и том же домене DNS.
  • Все серверы приложений должны совместно использовать один и тот же реестр пользователей (каталог LDAP). Поддерживаемые каталоги включают Lotus Domino (сконфигурированный как каталог LDAP), IBM Directory Server, MS Active Directory и iPlanet.
  • Браузеры, обеспечивающие доступ к серверам приложений, должны быть сконфигурированы на принятие cookies, которые используются для хранения содержащего информацию аутентификации маркера.
  • Необязательно, но SSO может быть настроен на работу только по зашифрованным HTTPS-соединениям.
  • LTPA является решением, разработанным компанией IBM; другие производители серверов приложений обеспечивают лишь ограниченную поддержку LTPA (или вообще ее отсутствие).
  • Условие относительно того, что все серверы приложений должны находиться в одном и том же домене DNS, не является ограничением, предъявляемым только LTPA. Маркер LTPA является cookie сеанса браузера, а свойства таких cookies определены в RFC-2965, который доступен по адресу:

    http://www.ietf.org/rfc/rfc2965.txt

    Этот RFC устанавливает, что агент пользователя (браузер) не предоставит cookie серверу, находящемуся в домене DNS, отличном от того, в котором находится выпустивший (установивший) cookie хост (сервер). Существуют прокси-архитектуры, которые могут распространяться за пределы отдельного домена DNS, но рассмотрение подобных развитых архитектур выходит за рамки данного курса.

    Для преодоления проблемы наличия множества доменов DNS существуют некоторые обходные маневры. Важным для понимания понятием является то, что домен или некая область из cookie сеанса LTPA используется только браузером клиента, но не серверами приложений. Таким образом, ключом для решения этой проблемы является использование псевдонимов DNS способом, при котором браузер отправляет cookie всем серверам, вовлеченным в доверенную среду LTPA, даже если реально они находятся в других доменах. К примеру, если ваши серверы Domino находятся в домене alpha.com, а вы имеете сервер портала в домене beta.com со страницей, на которой пользователи могут получать свою почту iNotes посредством iframe, то в Domino R5 вам необходимо сконфигурировать виртуальные серверы таким образом, чтобы они работали так, как если бы находились в домене beta.com. В Domino 6 для beta.com используйте документы Internet Site. В любом случае вам необходимо убедиться в том, что для серверов Domino в домене beta.com существуют записи псевдонимов DNS.

    Для обеспечения поддержки принципа единого входа между протоколами, такими, как HTTP и DIIOP (а также с сервером приложений IBM WebSphere), Domino предусматривает криптографический механизм на основе маркеров. Серверы, которые участвуют в обеспечении принципа единого входа, применяют зашифрованную "Web-конфигурацию SSO" ( "Web SSO Configuration" ) для совместного использования секретных данных в каталоге Domino в целях генерирования и проверки достоверности маркеров единого входа. Эта секретная информация используется сервером для проверки того, что представленный пользователем маркер был сгенерирован сервером, который совместно использует тот же секрет. В оставшейся части этой лекции мы ограничимся рассмотрением маркеров LTPA в WebSphere.

    WebSphere использует формат, называемый Lightweight Third Party Authentication (LTPA), который был реализован в Domino начиная с версии R5.0.5 и далее. Разрешение Domino взаимодействовать с WebSphere в вопросах обеспечения единого входа требует генерирования секретной информации в рамках административной среды WebSphere и последующего импортирования ее в Web-конфигурацию SSO (Web SSO Configuration). За дополнительной информацией о конфигурировании LTPA в WebSphere обратитесь к документации WebSphere.

    Примечание. В среде, где WebSphere используется совместно с продуктами Lotus, или Tivoli, или обоими вместе, ключи LTPA должны генерироваться WebSphere и импортироваться в другие продукты. Когда взаимодействие с WebSphere не требуется, Domino использует для маркера единого входа свой собственный формат, который незначительно отличается от реализованного в WebSphere. Серверы, участвующие в Domino SSO, совместно используют 20-байтовый секрет, который применяется для генерирования и проверки достоверности хеша SHA-1, доказывающего целостность маркера. Эта версия LTPA "Domino server only" ("Только для серверов Domino") не взаимодействует с LTPA WebSphere.

    7.2.1 Аутентификация

    При применении LTPA в качестве механизма аутентификации для аутентификации пользователя применяется доверенный сторонний сервер. В зависимости от того, выпущен ли уже для пользователя маркер, Web-сервер может выполнить одно из двух возможных действий. Этими двумя действиями, или механизмами, являются:

  • Создание (шифрование) маркера LTPA первоначальным сервером, к которому подключается пользователь.
  • Опрос (расшифровка) маркера LTPA, предоставленного браузером в запросе HTTP к серверу.
  • Создание маркера LTPA (шифрование)

    Пользователи подвергаются аутентификации один раз за время сеанса. Первоначальная аутентификация с использованием LTPA основана на имени и пароле, хранящихся в каталоге LDAP, когда каталогу доверяют все приложения, которые совместно используют cookie сеанса LTPA. Обратите внимание на то, что сервер каталога LDAP упоминается как "доверенная третья сторона (trusted third party)", отсюда и часть названия: "сторонняя аутентификация (аутентификация третьей стороной) (Third Party Authentication)". Когда пользователь предоставляет регистрационное имя ( ID ) и пароль первоначальному серверу в среде LTPA, тот предоставляет этот мандат пользователя в соответствующем запросе серверу каталога LDAP. Сервер каталога LDAP хеширует строку пароля, после чего она сравнивается с сохраненным хеш-значением пароля из записи пользователя в каталоге. Если полученный при регистрации пользователя хеш соответствует хешу, сохраненному в каталоге, то "связывание" считается успешным. При успеш ном связывании LDAP первоначальный Web-сервер (обычно сервер портала) сгенерирует маркер LTPA и предоставит этот cookie обратно браузеру. После этого браузер будет предоставлять этот cookie при каждом последующем HTTP-запросе пользователя к серверам, находящимся в указанном в cookie домене. Количество информации, содержащейся в cookie, минимально, отсюда термин "облегченная" (Lightweight). Структура маркера LTPA показана в табл. 7.1.

    . Определение данных маркера LTPA
    Данные Значение
    CookieName (Имя cookie) "LtpaToken" (Маркер LTPA)
    CookieValue (Значение cookie) Закодировано Base64 (Маркер LTPA)
    LtpaToken (Маркер LTPA) Зашифровано (Маркер аутентификации, совместно используемый ключ) с использованием 3DES
    AuthenticationToken (Маркер аутентификации) Данные пользователя+"%"+Дата истечения срока действия маркера+"%"+Закодировано Base64 (Цифровая подпись)
    Digital Signature (Цифровая подпись) Подписано (Данные пользователя, дата истечения срока действия маркера) с использованием секретного ключа LTPA (с применением RSA/SHA1)
    PrivateKey-ltpa (Секретный ключ LTPA) Секретный ключ (соответствующий открытому ключу, к которому могут получить доступ другие серверы) используется сервером LTPA для подписи данных аутентификации; этот секретный ключ должен быть доступен только серверу LTPA
    SharedKey (Совместно используемый ключ) Симметричный/совместно используемый ключ 3DES, который совместно применяется сервером LTPA и другими серверами для шифрования/расшифровки маркера
    UserData (Данные пользователя) Пары имени и значения, отделенные разделителем "$" (к примеру, "uid:"+ID пользователя)
    TokenExpirationDate (Дата истечения срока действия маркера) Число, представляющее время и дату истечения срока действия маркера. (Дата истечения срока действия маркера является числом миллисекунд, которые проходят начиная с полночи (00:00:00) 1 января 1970 г.)

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

    Опрос (расшифровка) маркера LTPA

    Если пользователь уже имеет маркер LTPA, то затем маркер подвергается проверке достоверности со стороны получившего его Web-сервера. Web-сервер, в свою очередь, может запросить для проверки достоверности удостоверения личности (мандата) (в нашем случае маркера LTPA) механизм аутентификации. Если маркер является действительным, то пользователь рассматривается как прошедший аутентификацию.

    Следующий пример отображает журнал отладки сервера Domino, выполняющего три шага по обработке полученного им маркера LTPA, сгенерированного WebSphere: декодирование кода Base64, расшифровка с применением совместно используемого секретного ключа (импортированного из WebSphere), и определение того, следует ли доверять имени пользователя в маркере как пользователю, прошедшему аутентификацию.

    06/09/2003 05:53:39.53 PM [03071:00010-106510] SSO API> Decoding Websphere
    style Single Sign-On token (LTPA).
    06/09/2003 05:53:39.53 PM [03071:00010-106510] SSO API> Dumping memory
    of encoded token [364 bytes].
    00000000: 6C71 3150 4847 4536 3576 597A 6154 7878 'qlP1GH6Ev5zYTaxx'
    00000010: 6F5A 534D 4262 6D70 3746 4643 6B56 3172 'ZoMSbBpmF7CFVkr1'
    00000020: 5146 7045 5762 756E 6467 4532 6C68 314B 'FQEpbWnugd2EhlK1'
    00000030: 3138 6E47 5164 5A41 634C 3965 3258 386C '81GndQAZLce9X2l8'
    00000040: 2B7A 7239 7263 7976 5537 6332 4957 4F44 'z+9rcrvy7U2cWIDO'
    00000050: 3755 4677 586D 2B6B 3768 7A31 3767 6976 'U7wFmXk+h71zg7vi'
    00000060: 3672 5949 4672 7566 4C4D 636E 6236 665A 'r6IYrFfuMLnc6bZf'
    00000070: 6E63 6A43 6246 4476 7159 476A 2F72 5445 'cnCjFbvDYqjGr/ET'
    00000080: 6742 6C57 7779 7457 3671 6632 7467 3978 'BgWlywWtq62fgtx9'
    00000090: 4947 6D71 4674 6643 7470 716D 6E56 5863 'GIqmtFCfptmqVncX'
    000000A0: 6C43 5A4A 5050 4E48 4733 336E 6F69 757A 'ClJZPPHN3Gn3iozu'
    000000B0: 4562 3777 475A 6136 3362 5138 6C4D 7554 'bEw7ZG6ab38QMlTu'
    000000C0: 5475 7166 7438 5971 5269 5736 4949 6238 'uTfq8tqYiR6WII8b'
    000000D0: 5839 6578 6552 714F 6378 6A35 4663 6435 '9XxeReOqxc5jcF5d'
    000000E0: 4343 4E69 3076 4A6D 4372 686A 306C 6A51 'CCiNv0mJrCjhl0Qj'
    000000F0: 4F57 6142 5955 7634 7771 3838 5A57 3230 'WOBaUY4vqw88WZ02'
    00000100: 6F42 7671 3939 7231 5765 3068 4753 596B 'Boqv991reWh0SGkY'
    00000110: 7A63 5862 4D31 4A4B 314E 4F6B 3576 4337 'czbX1MKJN1kOv57C'
    00000120: 7449 654A 5253 3577 477A 4352 384D 684C 'ItJeSRw5zGRCM8Lh'
    00000130: 6665 4E43 7365 504C 6B2B 7258 5157 7343 'efCNesLP+kXrWQCs'
    00000140: 5866 3741 576C 534C 4630 6941 3035 6C76 'fXA7lWLS0FAi50vl'
    00000150: 3247 356E 5076 2B68 4968 2F64 6955 3442 'G2n5vPh+hId/UiB4'
    00000160: 5065 4F6F 324C 476D 3958 3D30 'ePoOL2mGX90='
    06/09/2003 05:53:39.55 PM [03071:00010-106510] SSO API> Dumping memory
    of encoded token before decryption step [272 bytes].
    00000000: 53AA 18F5 847E 9CBF 4DD8 71AC 8366 6C12 '*Su.~.?.XM,qf..l'
    00000010: 661A B017 5685 F54A 0115 6D29 EE69 DD81 '.f.0.VJu..)min.]'
    00000020: 8684 B552 51F3 75A7 1900 C72D 5FBD 7C69 '..R5sQ'u..-G=_i|'
    00000030: EFCF 726B F2BB 4DED 589C CE80 BC53 9905 'Ookr;rmM.X.NS<..'
    00000040: 3E79 BD87 8373 E2BB A2AF AC18 EE57 B930 'y>.=s.;b/".,Wn09'
    00000050: E9DC 5FB6 7072 15A3 C3BB A862 AFC6 13F1 '\i6_rp#.;Cb(F/q.'
    00000060: 0506 CBA5 AD05 ADAB 829F 7DDC 8A18 B4A6 '..%K.-+-..\}..4'
    00000070: 9F50 D9A6 56AA 1777 520A 3C59 CDF1 69DC 'P.Y*Vw..RY<qM\i'
    00000080: 8AF7 EE8C 4C6C 643B 9A6E 7F6F 3210 EE54 'w..nlL;dn.o..2Tn'
    00000090: 37B9 F2EA 98DA 1E89 2096 1B8F 7CF5 455E '97jrZ.... ..u|^E'
    000000A0: AAE3 CEC5 7063 5D5E 2808 BF8D 8949 28AC 'c*ENcp^].(.?I.,('
    000000B0: 97E1 2344 E058 515A 2F8E 0FAB 593C 369D 'a.D#X`ZQ./+.<Y.6'
    000000C0: 8A06 F7AF 6BDD 6879 4874 1869 3673 D4D7 '../w]kyhtHi.s6WT'
    000000D0: 89C2 5937 BF0E C29E D222 495E 391C 64CC 'B.7Y.?.B"R^I.9Ld'
    000000E0: 3342 E1C2 F079 7A8D CFC2 45FA 59EB AC00 'B3Bayp.zBOzEkY.,'
    000000F0: 707D 953B D262 50D0 E722 E54B 691B BCF9 '}p;.bRPP"gKe.iy<'
    00000100: 7EF8 8784 527F 7820 FA78 2F0E 8669 DD5F 'x~...R xxz./i._]'
    06/09/2003 05:53:39.55 PM [03071:00010-106510] SSO API> Dumping memory
    of encoded token after decryption step [271 bytes].
    00000000: 3A75 7375 7265 3A5C 7469 6F73 6573 2D63 'u:user\:itsosec-'
    00000010: 646C 7061 632E 6D61 692E 7374 2E6F 6269 'ldap.cam.itso.ib'
    00000020: 2E6D 6F63 5C6D 333A 3938 552F 4449 443D 'm.com\:389/UID=D'
    00000030: 6948 6B6E 656C 4F2C 3D55 7250 646F 6375 'Hinkle,OU=Produc'
    00000040: 6974 6E6F 6F2C 723D 6465 6F62 6B6F 2C73 'tion,o=redbooks,'
    00000050: 3D63 7375 3125 3530 3235 3831 3733 3138 'c=us%10552183781'
    00000060: 3635 4125 4274 4669 5238 3748 4858 6C4F '56%AtBiF8RH7XHOl'
    00000070: 7A47 554F 5645 3575 7456 4172 597A 765A 'GzOUEVu5VtrAzYZv'
    00000080: 6756 314E 5374 6548 3671 7573 554E 6872 'VgN1tSHeq6suNUrh'
    00000090: 4E4B 3537 6632 6442 6A35 3161 6969 3479 'KN752fBd5ja1iiy4'
    000000A0: 2F65 5868 7261 5A7A 4D6A 5977 6E6F 715A 'e/hXarzZjMwYonZq'
    000000B0: 7868 2B43 4142 7434 7A52 5764 4B33 4E6A 'hxC+BA4tRzdW3KjN'
    000000C0: 3044 6471 4B55 4C48 7450 5772 7150 2B48 'D0qdUKHLPtrWPqH+'
    000000D0: 4655 7A33 4469 4F75 3261 4B4A 7349 5855 'UF3ziDuOa2JKIsUX'
    000000E0: 6A69 684A 5567 594D 4335 6266 3335 3256 'ijJhgUMY5Cfb53V2'
    000000F0: 6263 7034 4657 6851 6A35 7152 7636 3641 'cb4pWFQh5jRq6vA6'
    00000100: 6339 4662 4441 5A58 7248 744D 414A 3D '9cbFADXZHrMtJA='
    06/09/2003 05:53:39.56 PM [03071:00010-106510] SSO API> -LDAP Realm
    = itsosec-ldap.cam.itso.ibm.com\:389
    06/09/2003 05:53:39.56 PM [03071:00010-106510] SSO API> -Username
    = UID=DHinkle/OU=Production/o=redbooks/c=us
    06/09/2003 05:53:39.56 PM [03071:00010-106510] SSO API> -Expiration
    Ticks = 1055218378666 [06/10/2003 12:12:58 AM].
    06/09/2003 05:53:39.56 PM [03071:00010-106510] WebAuth> LOOKUP in view
    $Users (user='UID=DHinkle/OU=Production/o=redbooks/c=us')

    В этом примере обратите внимание на то, что Domino не осуществляет проверку достоверности цифровой подписи выпустившего сервера, когда определяет, что это маркер LTPA WebSphere. Domino интересует только три аспекта относительно принятого маркера LTPA:

  • факт, что маркер может быть расшифрован с применением совместно используемого секретного ключа;
  • имя пользователя (отличительное имя LDAP);
  • дату/время истечения срока действия.
  • Как правило, серверы WebSphere не имеют доступных Domino открытых/секретных ключей и, значит, без наличия общей инфраструктуры открытых ключей (PKI) для Domino не существует способа проверить достоверность цифровой подписи сервера WebSphere.

    Основным соображением относительно обеспечения безопасности при использовании LTPA в смешанной среде WebSphere-Domino является защита совместно используемого секретного ключа. Если секретный ключ был скомпрометирован, то для осведомленного относительно этого факта лица становится возможным генерировать поддельные маркеры. Несмотря на всевозможные меры относительно защиты секретного ключа, теоретически он все еще уязвим для автономных атак в том случае, если достаточное количество маркеров получено посредством выборки (с помощью сетевого сниффинга) и кто-то может определить ключ с применением взлома по методу "грубой силы" (brute force cracking). По этой причине секретный ключ на сервере WebSphere должен периодически повторно генерироваться, например каждые три месяца, после чего повторно импортироваться на другие серверы.

    7.2.2 Управление доступом

    Управление доступом с использованием LTPA основано на содержащемся внутри маркера имени пользователя. Это имя будет отличительным именем [distinguished name (DN)] из каталога LDAP, применяемым в мандате пользователя. Если DN в маркере не соответствует элементу управления доступом [к примеру, элементу таблицы управления доступом (ACL) базы данных Domino], то, если была подтверждена достоверность маркера LTPA, пользователь рассматривается как авторизованный, но он не будет иметь доступа к запрашиваемому ресурсу.

    Domino 6, а именно 6.0.2 и выше, обеспечивает чрезвычайно полезные возможности, которые позволяют устанавливать соответствие между содержащимся в маркере LTPA отличительным именем (DN) и другим именем в интересах управления доступом (осуществлять их преобразование). Сам по себе маркер LTPA не изменяется (не генерируется повторно), но аутентифицированное имя пользователя преобразовывается из отличительного имени LDAP в другое отличительное имя (DN), такое, как стандартное имя каталога Domino. Это преобразование имен происходит каждый раз, когда сервер Domino получает HTTP-запрос, в котором присутствует маркер LTPA. В связи с этим могут возникнуть некоторые непроизводительные издержки в работе сервера, вытекающие из выполнения дополнительного поиска имен. В целях ограничения до минимума потенциального количества требуемых поисков имен LDAP Domino проверяет внутренний кеш пользователя, и поэтому для уменьшения потенциального воздействия на производительность может использоваться настройка размера кеша пользователя. Мы говорим о потенциальном воздействии, так как авторы данного курса не выполняли испытаний "под нагрузкой" в целях измерения действительного влияния этого явления на производительность сервера.

    Дополнительная информация о функциях преобразования различных имен в Domino описана в разделе 11.9.4, "Преобразование имен в Domino".

    В дополнение к возможностям преобразования имен в Domino Tivoli WebSeal в связке с Tivoli Access Manager могут предоставлять функции преобразования имен на базе ресурса, к которому пользователь осуществляет попытку доступа.

    7.2.3 Решение связанных с LTPA проблем

    Если при конфигурировании инфраструктуры LTPA возникают проблемы, должны быть тщательно проанализированы значения различных параметров, связанных с LDAP. При использовании Lotus-технологий неправильная установка параметров "search filters" и "base dn" является причиной не менее 75 % связанных с LDAP-аутентификацией проблем.

    Фактически для изменения связанных с аутентификацией фильтров поиска (search filters) существует множество мест, и все из них должны быть проверены тщательным образом:

  • фильтры поиска Domino Directory Assistance;
  • фильтры поиска Sametime;
  • фильтры поиска QuickPlace;
  • фильтры поиска "global security" ("глобальной безопасности") WebSphere Application Server.
  • Пример фильтра поиска Sametime показан на рис. 7.1.

    (рис 7.1) Фильтр поиска LDAP Sametime

    Устранение связанных с LTPA проблем в Domino

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

    В NOTES.INI существует отладочная переменная, которая доступна в целях содействия в отыскании проблем с шифрованием и расшифровкой маркеров единственной подписи (Single Sign-On). Для получения информации о том, как извлекается Web SSO Configuration, а также о том, как шифруются и расшифровываются маркеры, установите DEBUG_SSO_TRACE_LEVEL=1. Для получения подробных дампов памяти, содержащих информацию о том, как шифруются и расшифровываются маркеры, установите DEBUG_ SSO_TRACE_LEVEL=2.

    Примечание. Domino 6 может иметь различные конфигурации SSO для разных служб (Web, POP и т. д.), даже на одном и том же сервере, использующем интернет-сайты. Однако, конфигурируя SSO в смешанной среде Domino 5/6, вы можете столкнуться с проблемами, так как версия 5 не распознает документы Internet Site. Хорошо, что Domino 6 все еще поддерживает "R5 Web config", и поэтому вы можете разрешить использование SSO в среде с различными версиями. Два метода конфигурации SSO на сервере Domino 6 взаимно исключают друг друга, и поэтому для смешанных сред вам надо выполнять только Web-конфигурацию версии 5. Не используйте документы Internet Site. Важными моментами здесь являются следующие:

  • Убедитесь в том, что для серверов Domino 6 на закладке Basics документа сервера запрещены (Disabled) интернет-сайты.
  • Создайте документ конфигурации SSO, используя клиент администратора Domino и открыв один из документов сервера. В строке меню выберите пункт "Create Web (R5)…" [Создать Web (R5)..] и далее SSO Configuration (Конфигурация SSO), назовите документ LTPAToken.
  • Не используйте название организации (Organization name) в документе конфигурации Web SSO (это поле применяется только для поддержки интернет-сайтов). Если вы укажете это название, документ SSO не будет виден с закладки интернет-протокола сервера.
  • 7.3 Сертификаты X.509

    Аутентификация клиента с использованием сертификатов X.509 предусматривает двустороннюю аутентификацию между пользователем браузера и сервером с применением для аутентификации пользователя как SSL, так и каталога LDAP. Множество приложений, совместно применяющих данный, одинаковый для них каталог LDAP, могут использовать одинаковую аутентификацию с применением сертификата. Это не одно и то же с использованием сертификата сервера для аутентификации сервера со стороны клиента, где клиенту просто необходимо доверять корневому центру сертификации (CA), который выпустил сертификат сервера. Мы сфокусируем внимание на выполняемой сервером аутентификации клиента.

    Как правило, сертификат X.509 клиента защищен паролем, поэтому в данном случае использование сертификатов X.509 рассматривается как двухфакторный метод аутентификации: что-то у вас есть (сертификат на рабочей станции), а что-то вы знаете (пароль). Так как сертификаты могут также быть проверены, проконтролированы на предмет аннулирования и истечения срока действия, то сертификаты X.509 могут быть очень безопасным методом аутентификации пользователей. Однако в связи с тем, что сертификат X.509 сделан переносимым (или экспортируемым) и он может быть установлен в другие приложения или на другие рабочие станции, появляются как проблемы логистики для пользователя, так и потенциальные уязвимости в безопасности. Достоин упоминания тот факт, что Internet Explorer хранит сертификаты X.509 клиента в реестре Windows. Полное удаление сертификата с рабочей станции может потребовать ручного удаления его из реестра. Только недавно получили толчок в своем развитии смарт-карты как средства, обеспечивающие как переносимость, так и безопасность в хранении сертификатов клиента, причем несмотря на то, что недостаток, связанный с отсутствием повсеместного использования устройств считывания смарт-карт в персональных компьютерах, определенно затрудняет их широкое использование.

    При аутентификации клиента клиент LDAP, а именно браузер, установленный на рабочей станции клиента, должен иметь цифровой сертификат (на основе стандарта X.509). Другими словами, сертификат X.509 содержит мандат пользователя и передается различным Web-серверам, которые требуют одинаковой аутентификации X.509. Каталогу LDAP необходимо иметь как корневой сертификат от соответствующего CA, который выпустил сертификат клиента, так и открытый SSL-сертификат клиента (ключ), который должен быть сохранен в соответствующей записи каталога. Этот цифровой сертификат используется для аутентификации клиента LDAP (браузера) по отношению к каталогу LDAP, применяемому для аутентификации. Таким образом, чтобы использовать сертификаты X.509, должна быть реализована инфраструктура интернет-сертификатов (PKI), в которой пользователи могут получать сертификаты X.509, являющиеся доверенными по отношению к службе каталога LDAP (серверу), а открытые сертификаты пользователей (ключи) хранятся в каталоге.

    В дополнение к SSL-аутентификации клиентов Web-браузеров для добавления к протоколам на основе соединений поддержки аутентификации на базе сертификатов X.509 может использоваться протокол SASL (Simple Authentication and Security Layer). Данный протокол содержит команду для идентификации и аутентификации пользователя по отношению к серверу. По выбору он может согласовывать уровень безопасности для последующего взаимодействия в рамках протокола. Если более точно, то существует как минимум семь различных типов поддерживаемой SASL аутентификации, но лишь тип аутентификации SASL "External" (Внешняя) использует сертификаты X.509. Спецификации SASL описаны в RFC-2222, который можно найти на адресу:

    http://www.ietf.org/rfc/rfc2222.txt

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

    7.3.1 Аутентификация

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

    Сейчас мы опишем последовательность аутентификации, которая выполняется с применением для аутентификации по протоколу SASL сертификатов X.509v3. Во время протокольного обмена в рамках аутентификации механизм SASL выполняет аутентификацию, передавая личность авторизации [известную как идентификатор пользователя (userid)] от клиента к серверу и договариваясь об использовании определенного механизмом уровня безопасности.

    Когда сервер LDAP получает от клиента запрос связывания LDAP, он обрабатывает запрос следующим образом:

  • Сервер анализирует запрос связывания LDAP и осуществляет выборку из него следующей информации:
  • отличительное имя (DN), с применением которого клиент предпринимает попытку пройти аутентификацию;
  • используемый метод аутентификации;
  • какое-либо содержащееся в запросе удостоверение личности (мандат), такое, как пароль;
  • если методом аутентификации является SASL, сервер производит также выборку из запроса связывания LDAP названия используемого механизма SASL.
  • Сервер нормализует отличительное имя, извлеченное из запроса.
  • Сервер извлекает какие-либо содержащиеся в запросе связывания LDAP элементы управления LDAP.
  • Если методом аутентификации является SASL, сервер определяет, поддерживается или нет указанный в запросе механизм SASL. Если механизм SASL не поддерживается сервером, то сервер отправляет клиенту код возврата ошибки и завершает процесс связывания.
  • Если механизм SASL поддерживается ( =EXTERNAL ) и тип аутентификации SSL является аутентификацией сервера и клиента, то сервер подтверждает, что сертификат клиента является действительным, был выпущен известным CA и в цепочке сертификатов клиента не существует недействительных или аннулированных сертификатов. Если пароль и отличительное имя клиента, как указано в ldap_sasl_bind, не имеют значения NULL, то затем для последующих операций LDAP в качестве аутентифицированной личности используется отличительное имя (DN), содержащееся внутри сертификата X.509v3 клиента. В противном случае либо клиент аутентифицируется анонимно (если DN и пароль имеют значение NULL), либо клиент аутентифицируется на основании предоставленной клиентом информации связывания.
  • Если методом аутентификации является Simple (Простой), то сервер осуществляет проверку на предмет того, представлено ли DN пустой строкой, либо на предмет того, что не представлен мандат пользователя.
  • Если DN представлено пустой строкой или если не определено имя (DN) либо не определен мандат, сервер предполагает, что клиент связывается анонимно и возвращает клиенту положительный результат. Для такого соединения DN и метод аутентификации остаются со значениями NULL и LDAP_AUTH_NONE соответственно.
  • Если для клиента не была заблаговременно установлена связь и в процессе операции связывания он не представил сертификат, то соединение отклоняется.
  • 7.3.2 Управление доступом

    Использование сертификатов клиента X.509 для SSL-аутентификацииЗдесь ошибка: имеется в виду SASL-аутентификация. клиента, как правило, очень жестко по отношению к аутентифицируемому имени. DN в сертификате клиента является именем, под которым проходит аутентификацию пользователь. Таким образом, представленное в сертификате отличительное имя DN должно быть именем, используемым элементами управления доступом к приложениям.

    SASL поддерживает такое свойство, как прокси-авторизация (proxy authorization), которое позволяет аутентифицированным пользователям осуществлять запрос выполнения ими действий от лица другого пользователя. Этот шаг происходит после того, как пользователь получает отличительное имя (DN) аутентификации, и влечет за собой отправку серверу личности авторизации. После этого сервер примет решение относительно того, разрешать или нет прохождение авторизации. Если авторизация разрешена, то LDAP-соединение пользователя переключается на применение связанного DN, полученного из личности авторизации, а сеанс LDAP продолжается с применением доступа от лица нового отличительного имени (DN) авторизации.

    7.4 DSAPI

    Интерфейс прикладного программирования Web-сервера Domino [Domino Web Server Application Programming Interface (DSAPI)] является интерфейсом прикладного программирования на языке С (C API), который позволяет вам писать свои собственные расширения к Web-серверу Domino. Расширения DSAPI, или фильтры, уведомляются всякий раз, когда по время обработки HTTP-запроса происходит определенное событие. Сам по себе DSAPI не является методом SSO, скорее он является частью инструментария разработки, который может применяться для конструирования в интересах Domino пользовательского механизма SSO.

    Обратите внимание на то, что некоторые бизнес-партнеры IBM Lotus предлагают как стандартные, так и пользовательские решения для Web-аутентификации пользователей с применением DSAPI на основе инструментария интерфейса прикладного программирования на языке С Domino 6. За дополнительной информацией обратитесь к Web-сайту компании IBM.

    Фильтр DSAPI позволяет вам настраивать обработку HTTP-запроса при возникновении определенных событий, например когда пользователь осуществляет доступ к ресурсу на сервере первый раз и вы желаете использовать специальную обработку данных аутентификации вместо обычной Web-аутентификации Domino. Процесс применяет набор предопределенных типов событий. Стек HTTP уведомляет фильтр DSAPI o событиях, после чего определенная разработчиком DSAPI логика принимает решение о том, что делать по факту наступления события. В настоящее время после события StartRequest существует 13 событий, которые могут быть перехвачены фильтром DSAPI. В зависимости от конструкции и ее реализации фильтр может поддерживать либо одно событие, либо некоторое их количество.

    Реализация интерфейса DSAPI зависит от того, индикацию ("регистрацию") каких из событий фильтр поддерживает. Итак, фильтр получает от менеджера соединений стека уведомления только о тех событиях, о поддержке которых он заявил. Рис. 7.2 отображает, где фильтр DSAPI вступает в действие на HTTP-сервере Domino относительно другой обработки данных на Web-сервере.

    (рис 7.2) Технологический процесс обработки стека интернет-протокола Domino 6

    В общем, события происходят в определенной последовательности. Они отражаются на состоянии стека HTTP на каждом из его шагов по обработке данных. Уведомления о событиях могут рассматриваться как возможность фильтрации (или фильтры) для изменения реализации по умолчанию для заданного шага обработки данных. При каждом событии процедуре обработки уведомления о сообщении фильтра передается структура, которая содержит дополнительную информацию и в большинстве случаев дополнительные функции обратного вызова. Фильтр может запрашивать функции обратного вызова для получения дополнительной информации или для выполнения определенной услуги. Процедура уведомления о событии вызывается только для тех событий, для которых зарегистрирован фильтр (тех, которые передаются в структуре Filter Init Data, когда фильтр загружен и проинициализирован). Типами методов запроса HTTP, при которых могут быть инициированы события, являются:

  • Нет метода: метод запроса HTTP не предусмотрен.
  • HEAD: метод HEAD часто используется для тестирования гипертекстовых ссылок в целях проверки достоверности, доступности и недавней модификации.
  • GET: метод GET используется для выполнения выборки любой информации (в форме объекта), идентифицированной посредством Request-URL (URL-запроса).
  • POST: метод POST требует, чтобы исходный сервер принимал объект, содержащийся в запросе, как новую субординантную информацию для ресурса, который идентифицирован посредством Request-URL в Requst-Line (Строка-статус).
  • PUT: метод PUT требует, чтобы содержащийся в запросе элемент был сохранен по представленному Request-URL.
  • DELETE: метод DELETE требует, чтобы исходный сервер удалил ресурс, идентифицированный посредством Request-URL.
  • TRACE: метод TRACE.
  • CONNECT: метод CONNECT.
  • OPTIONS: метод OPTIONS.
  • UNKNOWN: неизвестный метод запроса.
  • BAD: неверный метод запроса. Ошибка.
  • Типы событий описаны в последующих разделах в порядке их возникновения.

    Событие kFilterStartRequest

    Это событие используется для того, чтобы информировать все загруженные в текущий момент фильтры о том, что запрос HTTP был принят и вскоре будет обрабатываться. На этом шаге фильтр может подготовиться к обработке запроса. Как правило, на этом шаге фильтр должен распределить свои собственные данные секретного контекста и требуемые ресурсы, необходимые для управления обработкой запроса. Параметр pEventData не используется, передается NULL. Любой фильтр, поддерживающий это событие, должен возвращать значение kFilterHandledEvent.

    Событие kFilterRawRequest

    Все фильтры, загруженные на данный момент и поддерживающие это событие, уведомляются о том, что были изучены все входящие заголовки HTTP. Любой фильтр, которому необходима предварительная обработка входящих заголовков, может сделать это в данный момент времени. Обратите внимание на то, что в данный момент времени фильтр мог бы выбрать полное обслуживание запроса HTTP. Параметр pEventData является указателем на структуру FilterRawRequest.

    Событие kFilterParsedRequest

    Все фильтры, загруженные на данный момент и поддерживающие это событие, уведомляются о нем, когда стек HTTP заканчивает предварительный анализ всех входящих заголовков HTTP. Обратите внимание на то, что это отражает состояние, аналогичное состоянию в событии kFilterRawRequest, так как стек HTTP предварительно анализирует входящие заголовки HTTP перед тем, как начнет вызывать какой-либо фильтр. На этом шаге для полной обработки запроса вновь может быть выбран любой фильтр. Параметр pEventData является указателем на структуру FilterParsedRequest. Обратите внимание на то, что предусмотрены только две функции обратного вызова. На этом шаге вы можете получить доступ только к входящим заголовкам HTTP. Вы также имеете возможность изменить их с помощью kFilterRawRequest.

    Событие kFilterRewriteURL

    Все фильтры, загруженные на данный момент и поддерживающие это событие, имеют возможность изменить URL-адрес для перенаправления запроса на некий другой ресурс. Если фильтр успешно переписывает URL-адрес для обработки и сервер обрабатывает этот новый URL-адрес, то после этого на уровне DSAPI обработка данного события заканчивается, а это означает, что другие фильтры в списке не будут уведомляться. Параметр pEventData является указателем на экземпляр структуры FilterMapURL. Обратите внимание на тот факт, что FilterMapURL используется также в таких событиях, как kFilterTranslateRequest и kFilterPostTranslate.

    Событие kFilterAuthenticate

    Это событие происходит, когда стек HTTP находится в фазе аутентификации процесса. Код фильтра способен осуществить просмотр запроса и мандата пользователя, произвести аутентификацию пользователя по отношению к стеку HTTP или полностью обработать запрос. Параметр pEventData является указателем на экземпляр структуры.

    Событие kFilterUserNameList

    Это событие происходит, когда стек HTTP близок к генерированию списка имен групп пользователя. Это имена групп, членами которых является пользователь. Данное событие следует за событием kFilterAuthenticate. Этот фильтр может либо устанавливать, что сервер Domino заполняет список, добавляет или удаляет группы из списка, либо полностью обрабатывать событие (полностью самостоятельно генерировать список групп). Параметр pEventData в функции HttpEventProc является указателем на структуру FilterUserNameList.

    Событие kFilterTranslateRequest

    Это событие происходит, когда стек HTTP близок к преобразованию URL-адреса пути в целевой ресурс. Фильтр может либо преобразовывать запрос с использованием своих собственных правил преобразования и построения соответствий, либо полностью обрабатывать запрос. Параметр pEventData является указателем на экземпляр структуры FilterMapURL.

    Событие kFilterPostTranslate

    Это событие происходит после того, как было обработано событие kFilterTranslateEvent. Для фильтра это возможность изменить целевой ресурс, к которому осуществляется доступ. Фильтр может изменять как путь целевого ресурса, так и тип построения соответствий. Фильтр может также выбрать полное обслуживание запроса. Параметр pEventData является указателем на экземпляр структуры FilterMapURL.

    Событие kFilterAuthorized

    Это событие происходит после того, как имела место фаза аутентификации и был вычислен список имен групп пользователя. Фильтр может отвергнуть реализацию фазы авторизации по умолчанию и либо предоставить доступ к целевому ресурсу либо отказать в нем. Параметр pEventData является указателем на структуру FilterAuthorize. Она содержит информацию об используемом целевом ресурсе. Обратите внимание на тот факт, что фильтр может получить доступ к информации аутентифицированного пользователя путем применения служб при помощи функции обратного вызова ServerSupport с установленным флагом kGetAuthenticatedUserInfo. Это даст возможность пользователю получить доступ к аутентифицированному имени пользователя, а также к его или ее списку имен групп.

    Если фильтр отказывает в доступе к целевому ресурсу, он должен отправить клиенту соответствующий ответ и установить поле isAuthorized структуры FilterAuthorize в значение 0. После этого он может вернуть либо kFilterHandledRequest, либо kFilter-HandledEvent. После этого на уровне DSAPI стеку HTTP будет подан сигнал на завершение обработки текущего запроса.

    Событие kFilterProcessRequest

    Это последний шаг в обслуживании запроса HTTP. Это событие может быть использовано для отклонения реализации обработки запроса по умолчанию. На этой стадии данные для ответа вычисляются и отправляются клиенту. Параметр pEventData является указателем на структуру FilterMapURL.

    Событие kFilterEndRequest

    Это событие используется для информирования кода фильтра о том, что наступило время для обновления и освобождения ресурсов, выделенных для обработки заданного запроса HTTP. Параметр pEventData в этом случае имеет значение NULL.

    Событие kFilterAuthUser

    Это событие заменено событием kFilterAuthenticate, но все еще поддерживается для обеспечения совместимости с написанными ранее фильтрами DSAPI. При этом событии фильтр осуществляет аутентификацию Web-пользователя. Параметр pEventData является экземпляром структуры FilterAuthenticate. Использование приведено в описанном ранее событии kFilterAuthenticate.

    Это событие позволяет вам осуществлять настройку аутентификации Web-пользователей, которая зачастую является единственной частью реализации принципа единого входа в корпорации. В этом случае фильтр DSAPI уведомляется, когда Domino осуществляет аутентификацию пользователя. После этого фильтр DSAPI может проанализировать имя пользователя, проверить достоверность имен пользователей и паролей по отношению к действующей основной системе и, если проверка прошла успешно, уведомить Web-сервер Domino, что он обрабатывал аутентификацию пользователя, а также вернуть Domino мандат пользователя.

    Далее приведено руководство по настройке выходных переменных и кодов возврата для общих сценариев аутентификации, когда eventData указывает на структуру FilterAuthenticate.

    Сценарий 1. Фильтр был способен провести аутентификацию пользователя.

    Установите eventData > authName в каноническое имя, установите eventData > authType в kAuthenticBasic или kAuthenticClientCert, а код возврата в kFilterHandledEvent.

    Сценарий 2. Фильтр был неспособен провести аутентификацию пользователя, а другие фильтры или Domino должны двигаться вперед и предпринимать попытки проведения своей собственной аутентификации.

    Установите код возврата в kFilterNotHandled.

    Сценарий 3. Фильтр был неспособен провести аутентификацию пользователя, а другие фильтры или Domino не должны предпринимать попытки проведения своей собственной аутентификации.

    Установите eventData > authType в kNotAuthentic, а код возврата в kFilterHandledEvent.

    Событие kFilterResponse

    Это событие происходит, когда стек HTTP близок к отправке заголовков ответа HTTP клиенту. Это дает фильтру шанс изменить отправляемый клиенту ответ. Данное явление не полностью реализовано в текущей версии DSAPI. Параметр pEventData является указателем на экземпляр структуры FilterResponse.

    Событие kFilterRawWrite

    Это событие происходит, когда стек HTTP близок к отправке данных ответа HTTP клиенту. Это дает фильтру шанс изменить отправляемые клиенту данные ответа. Это не полностью реализовано в текущей версии DSAPI. Параметр pEventData является указателем на экземпляр структуры FilterRawWrite.

    Из описанных здесь событий для конструирования пользовательской реализации SSO мы заинтересуемся главным образом событиями kFilterAuthenticate, kFilterUserNameList и kFilterAuthorized. Обратите внимание на тот факт, что вместо события kFilterAuthenticate может также использоваться kFilterAuthUser, хотя оно и является событием версии 5, которое поддерживается в Domino 6 в целях обеспечения обратной совместимости. Новые фильтры DSAPI должны использовать событие kFilterAuthenticate.

    Анализ работы и программирования

    Функции DSAPI включены в инструментарий Lotus C API Toolkit, который может быть загружен с адреса:

    http://www.lotus.com/ldd

    Фильтр DSAPI скомпонован как общая библиотека (shared library) под UNIX и как DLL-файл под Win32. DSAPI поддерживается во всех платформах серверов Domino. Так как фильтр написан на языке С, вы можете использовать API языка С Notes для доступа к данным Domino либо другие интерфейсы С для доступа к другим системам. Детали компиляции и компоновки общей библиотеки отличаются в зависимости от платформы. Обратите внимание на тот факт, что инструментарий API языка С Lotus для Domino 6 не является обратносовместимым, означая тем самым, что программы, разработанные с применением инструментария 6.х, не будут работать в предшествующих шестой версиях Domino. Если вы имеете среду Domino R5 или смешанную среду R5 и Domino 6, вы должны использовать инструментарий R5.x.

    Фильтр DSAPI является серверным расширением, и поэтому при доступе к базам данных Domino посредством API языка С фильтр имеет привилегии ID сервера.

    Так как функции уведомления фильтра могут быть вызваны одновременно из различных потоков сервера, все коды фильтров должны быть защищены по потоку. Когда поток сервера Domino получает запрос HTTP, он выделяет память под новый экземпляр структуры FilterContext. Когда поток обработает запрос, он передает этот экземпляр всем функциям фильтра, которые он вызывает. FilterContext содержит указатель privateContext, который вы можете использовать для хранения своей собственной структуры данных. Все специфические данные потока, которые фильтру необходимо обслуживать от события к событию, должны сохраняться в вашей структуре privateContext.

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

    Установите фильтр посредством указания имени фильтра в записи Server поля имени файла фильтра DSAPI в пунктах меню Internet Protocols (интернет-протоколы) > HTTP table (Таблица HTTP). Вы можете указать только имя файла фильтра, если он расположен в каталогах программ или данных Domino; в противном случае вы должны указать полное имя файла. Убедитесь в том, что всем файлам фильтров обеспечена безопасность посредством соответствующих файловых разрешений и обеспечения физической безопасности в целях предотвращения подделки фильтра со стороны неавторизованных пользователей.

    DSAPI и LTPA

    Инструментарий API языка С Domino 6 предоставляет для работы с маркерами LTPA две функции:

  • SECTokenValidate – проверка достоверности маркера LTPA SSO;
  • SECTokenGenerate – генерирование маркера LTPA SSO.
  • Эти две функции соответствуют расшифровке и шифрованию маркеров LTPA, описанных ранее в разделе, посвященном LTPA.

    7.4.1 Аутентификация

    DSAPI обеспечивает достаточную гибкость для аутентификации Web-пользователя Domino с применением практически любого критерия. Такой критерий может основываться на сравнении имени и пароля в Domino или во внешнем каталоге LDAP, на сравнении представленного в cookie имени или на каком-либо другом механизме. Вместе с большой гибкостью присутствуют и издержки, связанные с обеспечением безопасности используемого механизма. Решать проблему таких издержек приходится разработчику DSAPI. Другая потенциальная проблема и издержки связаны с производительностью. К примеру, если DSAPI требуется соединение с каталогом из внешней области, то время поиска может чрезмерно влиять на производительность. Разработчик может либо предпочесть проверку кеша пользователя, либо игнорировать кеш и производить внешний поиск при каждом случае доступа.

    7.4.2 Управление доступом

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

    Разработчик способен предоставить полный контроль относительно того, как пользовательское имя может преобразовываться или ставиться в соответствие другому имени посредством установки "authname" в любое желаемое значение и формат. См. описанный ранее сценарий 1 для события kFilterAuthUser.

    7.5 Заголовки HTTP

    Для ID пользователей и паролей Domino 6 поддерживает заголовки HTTP, что позволяет вам применять сторонний Web-сервер в качестве входного для сервера Domino. Это свойство часто описывается как WebSphere Application Server plug-in (Плагин сервера приложений WebSphere) для Domino, что является отчасти дезориентирующим названием, так как это не то же самое, что и плагин (plug-in) аутентификации или Перехватчик доверительных связей [Trust Association Interceptor (TAI)] сервера приложений WebSphere, и также это не включает в себя плагин Domino, так как это только параметр файла notes.ini, который сообщает HTTP Domino о приеме в заголовках HTTP ID пользователей и паролей, относящихся по стилю к серверу приложений WebSphere. Реальный плагин для поддержки этой архитектуры SSO установлен на входном HTTP-сервере. Плагины для входных HTTP-серверов, которые совместимы с внутренними серверами Domino, доступны для Microsoft IIS и IBM HTTP Server, а в будущих редакциях Domino 6 планируется поддержка таких плагинов для Apache и iPlanet.

    В целях поддержания принципа единого входа с применением заголовков HTTP на внутреннем сервере Domino, добавьте в файл NOTES.INI следующую строку:

    HTTPEnableConnectorHeaders=1

    Этот параметр позволяет задаче HTTP Domino обрабатывать специальные заголовки, добавленные к запросам плагином сервера приложений WebSphere для IIS или для IBM HTTP Server. Такие заголовки включают информацию о конфигурации входного сервера и о статусе аутентификации пользователей.

    В качестве меры безопасности задача HTTP Domino игнорирует эти заголовки в том случае, если параметр файла NOTES.INI не разрешен. Это предотвращает имитацию плагина со стороны атакующего.

    Необходимо понимать, что при использовании этой архитектуры для обеспечения безопасности канала между входным HTTP-сервером и сервером Domino должны быть использованы брандмауэры и ограничения по портам; в противном случае сервер Domino подвергается риску, потому что заголовки HTTP могут легко быть подделаны. Другими словами, обеспечьте безопасность канала "HTTP-сервер – HTTP Domino" таким образом, чтобы только HTTP-серверу было разрешено подключаться к порту Domino 80/443. Целостность этой архитектуры SSO полностью зависит от безопасности канала между производящим аутентификацию входным HTTP-сервером и сервером Domino.

    7.5.1 Аутентификация

    При использовании поддержки плагина заголовков HTTP в Domino, последний возлагает обязанности по проведению аутентификации всех пользователей на входной HTTP-сервер.

    7.5.2 Управление доступом

    Элементы управления доступом Domino при использовании для аутентификации заголовков HTTP зависимы от имен пользователей, предоставленных плагином на внешнем Web-сервере. Списки управления доступом (ACL) баз данных Domino по-прежнему используются для определения того, должен ли быть предоставлен пользователю доступ к заданному ресурсу. Так как аутентифицированное имя пользователя в заголовке обычно не является иерархическим именем Notes пользователя, то списки управления доступом баз данных должны содержать элементы, которые соответствуют предполагаемой форме имени пользователя в заголовке. Общим подходом при решении этой проблемы является разрешение анонимного доступа к базам данных Domino и доверие аутентификации и элементам управления доступом входного сервера, которые определены в его реестре безопасности для URL-адресов Domino.

    Главным недостатком этого подхода является невозможность реализации элементов управления доступом на уровне документов, таких, как осуществление доступа к документам с правами читателя (reader) или автора (writer). Аналогично не могут быть использованы элементы управления доступом на уровне полей, такие, как формулы hide when (скрыть когда) в форме Domino, которые используют принадлежность к группам или роли групп. Так как документы Domino получают сгенерированные идентификаторы (ID документов и UNID), то непрактично пытаться осуществлять доступ и управлять им с применением URL-адресов.

    Для преобразования имени пользователя из заголовка HTTP в иерархическое имя Notes может быть реализовано преобразование имен Notes. Так как обычно иерархическое имя Notes – это то, что применяется в ACL базы данных Domino, то для этого могут быть использованы списки управления доступом (ACL) Domino, обеспечивая тем самым соответствие требуемым для поддержки преобразования имен условиям. Дополнительную информацию относительно того, как Domino может преобразовывать имя из внешнего каталога LDAP в иерархическое имя Notes, можно найти в разделе 11.9.4, "Преобразование имен в Domino".

    7.6 Сценарий единого входа (принципа единственной подписи)

    Для выделения и демонстрации производительности и важности решения по обеспечению единого входа в этом разделе предусмотрено подробное обсуждение на высоком уровне одного потенциального сценария SSO. Более подробный сценарий предельно безопасного объединенного решения представлен в части 4, "Безопасный сценарий".

    При базовом сценарии SSO, который мы здесь описываем, существует объединенная инфраструктура на основе Domino, составленная из Lotus Domino и Lotus Sametime, в зависимости от которой организация принимает решение о реализации среды портала WebSphere. Для обеспечения общей связки технологий выбирается вариант SSO с применением LTPA, после чего он подлежит реализации в целях предоставления непрерывного взаимодействия с пользователями.

    Сейчас мы изучим, как бы эта новая инфраструктура функционировала, причем сначала рассмотрим основные операции взаимодействия между пользователем и сервером портала, как это показано на рис. 7.3.

    (рис 7.3) Взаимодействие браузера и портала при использовании SSO с применением LTPA

    На шаге "1-Аутентификация" пользователь осуществляет запрос портала и предоставляет набор полномочий аутентификации (мандат). После этого сервер портала проверяет мандат (2) и при условии успешной аутентификации (3) создает маркер LTPA. Затем этот маркер LTPA не только передается обратно браузеру клиента (4), но и размещается в службе мандатов портала (5).

    Далее для демонстрации того, как этот "кешированный" маркер LTPA может быть использован порталом, мы рассмотрим операции взаимодействия системы, представленные на рис. 7.4.

    (рис 7.4) Взаимодействие портала и Domino при использовании SSO с применением LTPA

    В этом наборе операций взаимодействия клиент в лице браузера запрашивает портлет Domino с сервера портала (1). Сервер портала знает, что для получения данных для портлета он должен осуществить доступ к Domino от имени пользователя, и поэтому он обращается к серверу мандатов и осуществляет выборку маркера LTPA, который был кеширован для пользователя по исходному регистрационному имени (2 3). После этого портал отправляет Domino запрос с маркером LTPA (4). При доверии со стороны Domino маркеру LTPA производится проверка по ACL для запрашиваемого ресурса на основе имени пользователя из маркера LTPA (5). При условии, что пользователь авторизован, Domino отправит данные назад серверу портала (6), который затем предоставляет их обратно пользователю как часть изначально запрошенного портлета.

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

    Наконец, на рис. 7.5 мы имеем одну финальную схему для демонстрации взаимодействия в рамках SSO с применением LTPA. В данном случае использующий браузер пользователь запрашивает портлет Web-конференции Sametime (1). Снова сервер портала знает, что для получения списка встреч (meeting) для портлета он должен осуществить доступ к Sametime от имени пользователя, и поэтому он обращается к серверу мандатов и осуществляет выборку маркера LTPA, который был кеширован для пользователя по исходному регистрационному имени (2 3). После этого портал отправляет Sametime запрос с маркером LTPA (4). При доверии Sametime маркеру LTPA производится проверка по ACL для списка встреч на основе имени пользователя из маркера LTPA (5). При условии, что пользователь авторизован, Sametime отправит данные назад серверу портала (6), который затем предоставляет данные обратно пользователю как часть изначально запрошенного портлета Web-конференции (7).

    (рис 7.5) Взаимодействие браузера, портала и Sametime при использовании SSO с применением LTPA

    При условии, что после этого пользователь изъявит желание присутствовать на встрече, браузер начнет непосредственно взаимодействовать с сервером Sametime (8), который может запросить у пользователя браузера его мандат (9). После этого браузер ответит предоставлением маркера LTPA из своего кеша (10) и начнется установка встречи (11).

    Будем надеяться, этот пример помог продемонстрировать мощь однородного решения по организации единого входа, особенно в случае использования объединенной портальной инфраструктуры.

    7.7 Краткие выводы

    Мы обсудили четыре основных метода для поддержки SSO в случае применения объединенных технологий Lotus на базе Lotus Domino. Эти методы различаются в плане проблем обеспечения безопасности и сложности проектирования.

    LTPA имеет преимущество, выражающееся в поддержке со стороны практически всех программных продуктов IBM Lotus, WebSphere и Tivoli Access Manager. Этот метод является зависимым от общего, доверенного каталога, используемого в интересах мандатов пользователей. Возможность поддержки каталогов Domino (Domino's Directory Assistance) обеспечивает поддержку использования мандатов, сохраненных за пределами каталога Domino.

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

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

    Заголовки HTTP имеют преимущество, выражающееся в относительной легкости реализации; однако они приносят высокую степень риска для безопасности, если канал между входным HTTP-сервером и внутренним сервером Domino является не полностью безопасным. В большинстве случаев они реализуются в связке с системой управления доступом организации (Enterprise Access Management), которая централизованно управляет всем доступом к Web-ресурсам.

    Наконец, при принятии решения относительно выбора одного или другого метода SSO пользователь должен рассмотреть, возможно ли будет:

  • Попытаться произвести объединение с существующим решением SSO, либо построенным по техническим условиям заказчика, либо не являющимся решением от компании IBM. Весьма правдоподобно, что в этом случае отвечать всем требованиям будут решения либо на основе DSAPI, либо на основе заголовков HTTP.
  • Попытаться реализовать "специфическое для приложения" решение SSO либо произвести объединение с другими существующими приложениями от компании IBM. В этом случае наибольшим смыслом будет обладать применение решения на основе LTPA.
  • Попытаться реализовать общее для всей организации решение SSO, покрывающее все системы и инфраструктуры. В этом случае правильным направлением может быть использование решения по управлению доступом в организации как части общего решения по управлению подлинностью. Для удовлетворения этих потребностей должно быть внимательно проанализировано и принято во внимание семейство программных продуктов "управления подлинностью (identity management)" Tivoli от компании IBM.
  • Вернуться к учебному плану