Приложение A: LDAP — Краткое введение в ASN.1

В этом разделе содержится краткий и весьма поверхностный обзор синтаксиса ASN.1, достаточный для понимания выражений соответствия компонентов. Вообще-то, Вам редко когда придётся спускаться до такого уровня детализации, если, конечно, Вы генетически к этому не предрасположены. Существует множество прекрасных и свободных ASN.1-ресурсов, которые посвящённые читатели найдут бесконечно увлекательными и очень весёлыми. Менее посвящённые читатели, возможно, упадут в обморок от одного только случайного взгляда на эти вещи.

Если Вам требуется (а, может, Вы даже хотите) узнать больше об ASN.1 (и DER), то мы можем предложить Вам это руководство по выживанию. Но предупреждаем — ничего весёлого там нет.

Если обратиться к определению ASN.1 OID, то можно увидеть, что оно состоит из текстового описания и некоторого количества синтаксиса ASN.1 (или тарабарщины), формально определяющей данный объект. Синтаксис ASN.1 губительно сложен, и в данном обзоре внимание сфокусировано на 5 типах, имеющих важное значение при поиске соответствия компонентов: SEQUENCE OF, SEQUENCE, SET OF, SET и CHOICE. Короткие рабочие определения этих элементов:

SEQUENCE OFУпорядоченный список элементов (вхождений) одинакового типа. Порядок фиксированный и содержит только один тип (или атрибут в контексте LDAP).
SET OFНеупорядоченный список элементов (вхождений) одинакового типа. Порядок нефиксированный (фиксируется только во время выполнения) и содержит только один тип (или атрибут в контексте LDAP).
SEQUENCEУпорядоченный список элементов (вхождений) разных типов. Порядок фиксированный и содержит несколько типов (или атрибутов в контексте LDAP).
SETНеупорядоченный список элементов (вхождений) разных типов. Порядок нефиксированный (фиксируется только во время выполнения) и содержит несколько типов (или атрибутов в контексте LDAP).
CHOICEОпределяет один элемент (вхождение). Этот элемент может быть одного из тех типов, которые определены в упорядоченном списке.

В этом руководстве соответствие компонентов разделено на две категории: простое и комплексное. Простое соответствие компонентов, как сказано в данном руководстве, используется только с атрибутами, определёнными с помощью конструкций SEQUENCE OF и SET OF — по существу, эти конструкции определяют несколько элементов (вхождений), из которых все одного и того же типа. Например, DistinguishedName определён с помощью SEQUENCE OF и имеет, согласно X.501, следующее определение ASN.1:

# Определение из X.501
DistinguishedName   ::= RDNSequence
# DistinguishedName является псевдонимом для RDNSequence
RDNSequence ::= SEQUENCE OF RelativeDistinguishedName
# Определяет RDNSequence как упорядоченный список (SEQUENCE OF)
# элементов (вхождений) RelativeDistinguishedName

RelativeDistinguishedName ::= SET SIZE (1..MAX) OF
          AttributeTypeAndValue
# Определяет состав каждого RelativeDistinguishedName
# как SET (неупорядоченный список) AttributeTypeAndValue
# каждый из которых состоит из SEQUENCE (упорядоченного списка)
# типов и значений записей, как определено ниже
AttributeTypeAndValue ::= SEQUENCE {
  type        AttributeType ({SupportedAttributes}),
  value       AttributeValue ({SupportedAttributes}{@type}) }

  AttributeType ::= ATTRIBUTE.&id
  AttributeValue ::= ATTRIBUTE.&Type

Примечание: В определениях ASN.1 регистр символов имеет визуально существенное значение, так, например, distinguishedName — это имя атрибута, а DistinguishedName — это имя определения атрибута.

Поскольку все элементы (вхождения) имеют один и тот же тип, в любом выражении соответствия компонентов достаточно идентифицировать количество элементов. Например, при использовании положительных чисел при извлечении элементов в выражении соответствия компонентов, "1" будет соответствовать первому вхождению в списке элементов (в случае с DN и положительными числами номера элементам назначаются СПРАВА НАЛЕВО). Примеры атрибутов, использующих DistinguishedName: DistinguishedName (2.5.4.49), member ( 2.5.4.31 ), seeAlso (2.5.4.34), owner (2.5.4.32), roleOccupant (2.5.4.33).

Комплексное соответствие компонентов применяется к атрибутам, определённым с помощью конструкций SEQUENCE и SET. Эти конструкции определяют несколько значений, каждое из которых может быть разного типа. Например, uniqueMember (2.5.4.50) имеет следующую нотацию ASN.1:

# Определение из X.520
uniqueMember ATTRIBUTE ::= {
 WITH SYNTAX NameAndOptionalUID
 EQUALITY MATCHING RULE uniqueMemberMatch
 ID id-at-uniqueMember }

# указывает на ASN.1-определение NameAndOptionalUID,
# являющееся SEQUENCE
NameAndOptionalUID ::= SEQUENCE {
 dn DistinguishedName,
 uid UniqueIdentifier OPTIONAL }

# в свою очередь UniqueIdentifier определён в X.520 как
uniqueIdentifier ATTRIBUTE ::= {
 WITH SYNTAX UniqueIdentifier
 EQUALITY MATCHING RULE bitStringMatch
 ID id-at-uniqueIdentifier }
UniqueIdentifier ::= BIT STRING

# DistinguishedName определено в предыдущем примере

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



Проблемы, комментарии, предположения, исправления (включая битые ссылки) или есть что добавить? Пожалуйста, выкроите время в потоке занятой жизни, чтобы написать нам, вебмастеру или в службу поддержки. Оставшийся день Вы проведёте с чувством удовлетворения.

Нашли ошибку в переводе? Сообщите переводчикам!

Copyright © 1994-2017 ZyTrax, Inc. Все права защищены. Последнее изменение страницы: 5 сентября 2017 г.
Переведено участниками проекта Pro-LDAP.ru в 2012-2017 г.