Опубликован: 26.01.2005 | Уровень: специалист | Доступ: платный | ВУЗ: Московский государственный университет имени М.В.Ломоносова
Лекция 3:

Инфраструктура Открытого Ключа (часть 3)

< Лекция 2 || Лекция 3: 12345 || Лекция 4 >
Аннотация: Описаны основные свойства протокола LDAP, приведены типичные переговоры LDAP. Рассматриваются операции протокола LDAP: Bind, Unbind, Search, Modify, Add, Delete, Modify DN, Compare, Abandon.

Протокол LDAP

Основные свойства протокола LDAP:

  • Используется клиент-серверная модель.
  • Может быть сделано несколько запросов за один раз – каждый ответ содержит идентификатор сообщения запроса.
  • В протоколе определено 9 основных операций протокола – запрос информации (2 операции), изменение информации (4 операции), аутентификация и управление (2 операции).
  • LDAPv3 предоставляет расширенные операции и расширенные возможности управления.

Протокол LDAP описывается с использованием ASN.1, используя подмножество BER.

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

Клиент указывает версию, которую он использует, как часть запроса Bind . Клиенты могут определить версии протокола, которые поддерживает сервер, по атрибуту supportedLDAPVersion из корневой записи сервера. Серверы, которые реализуют версию 3, должны предоставлять данный атрибут.

Все операции протокола инкапсулированы в общий конверт LDAPMessage, который определяется следующим образом:

LDAPMessage ::= SEQUENCE { 
  messageID  MessageID, 
  protocolOp  CHOICE { 
    bindRequest     BindRequest, 
    bindResponse    BindResponse, 
    unbindRequest   UnbindRequest, 
    searchRequest   SearchRequest, 
    searchResEntry  SearchResultEntry, 
    searchResDone   SearchResultDone, 
    searchResRef    SearchResultReference,
    modifyRequest   ModifyRequest, 
    modifyResponse  ModifyResponse, 
    addRequest      AddRequest, 
    addResponse     AddResponse, 
    delRequest      DelRequest, 
    delResponse     DelResponse, 
    modDNRequest    ModifyDNRequest, 
    modDNResponse   ModifyDNResponse, 
    compareRequest  CompareRequest, 
    compareResponse CompareResponse, 
    abandonRequest  AbandonRequest, 
    extendedReq     ExtendedRequest, 
    extendedResp    ExtendedResponse, 
    ... }, 
  controls [0] Controls OPTIONAL 
} 
MessageID ::= INTEGER (0 .. maxInt) 
maxInt INTEGER ::= 2147483647 -- (231 – 1) --

LDAPMessage обеспечивает конверт, содержащий общие поля, необходимые всем обменам протокола. В настоящий момент общими полями являются только messageID и controls.

MessageID из запроса должно иметь ненулевое значение, отличное от значений в любых других запросах для данного соединения LDAP, частью которого является данное сообщение. Обычно клиенты увеличивают значение messageID для каждого запроса.

Ответы сервера содержат значение messageID из соответствующего запроса.

Control представляет собой способ специфицировать информацию расширения для сообщения LDAP. Control только изменяет семантику сообщения, к которому он присоединен.

Controls ::= SEQUENCE OF Control 
Control ::= SEQUENCE { 
    controlType  LDAPOID, 
    criticality  BOOLEAN DEFAULT FALSE,
    controlValue OCTET STRING OPTIONAL 
}

Поле controlType должно быть представлено в UTF-8 в виде OBJECT IDENTIFIER, который однозначно идентифицирует control. Это предотвращает конфликты между именами control.

Поле criticality является либо TRUE, либо FALSE, и встречается в сообщениях запроса, которые имеют соответствующее сообщение ответа. Для всех других сообщений (например, abandonRequest, unbindRequest и всех сообщений ответа) поле criticality устанавливается в FALSE.

Если сервер распознает тип control, и он соответствует операции, сервер при выполнении операции будет использовать control.

Если сервер не распознает тип control, или он не соответствует операции, и поле criticality есть TRUE, сервер не должен выполнять операцию и вместо этого возвращает resultCode unavailableCriticalExtension.

Если control не распознан или соответствующий бит в поле criticality есть FALSE, сервер должен игнорировать control.

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

LDAPResult ::= SEQUENCE { 
  resultCode ENUMERATED { 
    success                      (0), 
    operationsError              (1), 
    protocolError                (2), 
    timeLimitExceeded            (3), 
    sizeLimitExceeded            (4), 
    compareFalse                 (5), 
    compareTrue                  (6), 
    authMethodNotSupported       (7), 
    strongAuthRequired           (8), 
-- 9 зарезервировано -- 
    referral                     (10), 
    adminLimitExceeded           (11), 
    unavailableCriticalExtension (12), 
    confidentialityRequired      (13), 
    saslBindInProgress           (14), 
    noSuchAttribute              (16), 
    undefinedAttributeType       (17), 
    inappropriateMatching        (18), 
    constraintViolation          (19), 
    attributeOrValueExists       (20), 
    invalidAttributeSyntax       (21), 
-- 22-31 не используются -- 
    noSuchObject                 (32), 
    aliasProblem                 (33), 
    invalidDNSyntax              (34), 
-- 35 зарезервировано для неопределенного --
-- isLeaf --
    aliasDereferencingProblem    (36), 
-- 37-47 не используются -- 
    inappropriateAuthentication  (48), 
    invalidCredentials           (49), 
    insufficientAccessRights     (50), 
    busy                         (51), 
    unavailable                  (52), 
    unwillingToPerform           (53), 
    loopDetect                   (54), 
-- 55-63 не используются -- 
    namingViolation              (64), 
    objectClassViolation         (65), 
    notAllowedOnNonLeaf          (66), 
    notAllowedOnRDN              (67), 
    entryAlreadyExists           (68), 
    objectClassModsProhibited    (69), 
-- 70 reserved for CLDAP -- 
    affectsMultipleDSAs          (71), 
-- 72-79 не используются -- 
    other                        (80), 
    ... }, 
-- 81-90 зарезервировано для APIs -- 
  matchedDN LDAPDN, 
  diagnosticMessage LDAPString, 
  referral [3] Referral OPTIONAL 
}

Коды результата являются расширяемыми.

< Лекция 2 || Лекция 3: 12345 || Лекция 4 >
Илья Сидоркин
Илья Сидоркин

Добрый день! Подскажите пожалуйста как и когда получить диплом, после сдичи и оплаты?????

Наталья Шульга
Наталья Шульга

Курс "информационная безопасность" .

Можно ли на него записаться на ПЕРЕПОДГОТОВКУ по данному курсу? Выдается ли диплом в бумажном варианте и высылается ли он по почте?

Ярослав Ханько
Ярослав Ханько
Украина
Jacob Liberman
Jacob Liberman
Нидерланды, Amsterdam