Subsections
A History of Directory Standards
Early Electronic Directories
In the early 1980s research was carried out into distributed
computing systems at the Xerox Palo Alto Research Center and led to
the development of Grapevine [5]. Later, the Xerox
Clearinghouse was built on the results of this research. It was
the first distributed directory to share user account information. The
Grapevine network spanned 1500 computers in more than 50 local
networks. Thanks to Clearinghouse a user could log in both at his
usual desk, and at any of the Xerox overseas offices.
Special Purpose Directories
Along with the Internet came another distributed directory--the
Domain Name System (DNS). DNS was designed
to fulfil a specific task. The IP protocol used in all Internet
transmissions employs numeric addresses. Since these are quite
hard to remember for humans, a level of indirection was added: a
symbolic name was associated with each IP address.
At first these mappings were kept in plain text files that were
centrally maintained for the whole Internet. But as the Internet grew,
this soon proved unfeasible. Therefore the hierarchical DNS was
introduced in which the various branches of the DNS were delegated to
organizations, who are responsible for their domain.
The name-to-address mapping tables are kept by so-called name
servers. If a client requests an IP address for a non local hostname,
the local name server will then retrieve the address of the name
server for the target's domain and in turn get the requested IP
address from this server on behalf of its client. [16]
General Purpose Directories - X.500
X.500 was developed jointly by the International Telegraph and
Telephone Consultative Committee (CCITT), which is now known as
the International Telecommunications Union (ITU), and the
International Organization for Standardization (ISO)
[6]. Their aim was to define a general-purpose
directory standard, which would cater for different needs. The
ITU-T members, mostly national telecommunications operators, looked
for a system, which would provide a white pages service for phone
numbers and X.400 [37] email addresses, whereas the ISO was interested
mainly in providing a name service for Open Systems Interconnect (OSI)
applications. The idea was to build a globally distributed system that
would offer homogenous access to the information [6]. That is why in X.500
terms directories are often referred to in the singular, i.e. there
exisits one and only one directory--called ``THE
Directory'' .3.1
The first joint meeting was held in April 1986 and the standard
documents--the so-called '88 edition--were published in January 1990
by CCITT as ``X.500 Blue Book Recommendations'' and in January 1991 by
ISO as ``ISO/IEC 9594 - The Directory''. X.500 consists of multiple
parts:
-
- X.500 Overview of concepts, models and services [38]
-
- X.501 Models [39]
-
- X.509 Authentication framework [40]
-
- X.511 Abstract service definition [41]
-
- X.518 Procedures for distributed operation [42]
-
- X.519 Protocol specifications [43]
-
- X.520 Selected attribute types [44]
-
- X.521 Selected object classes [45]
-
- X.525 Replication [46]
-
- X.530 Use of systems management for administration of the Directory [47]
The X.500 standard was updated in 1993 and 1997. Currently the 4th
edition is being drafted. While the core functionality was
defined in the 1988 edition, some areas (e.g. replication and access
control) were left to be addressed later. The 1993 edition then
brought the addition of an access control model and a replication
mechanism called shadowing. Furthermore the orginial
information model specification was significantly revised
[98]. Object classes were divided into
abstract, structural and auxiliary types;
attributes into operational and user types. Name
forms, DIT Structure and Content Rules were added; as were
Matching Rules. A definition of the directory schema itself was
now stored in the directory. This allowed applications to retrieve
information about supported schema items.
Figure:
Components of an X.500 directory service [30]
|
|
As shown in Figure
several different protocols are used: A
client (DUA) will contact a server (DSA) using the Directory
Access Protocol (DAP). If a DUA requests information that is not
held by the DSA itself but the DSA knows where in the directory it may
be stored, the DSA can retrieve this information on behalf of its
clients. This chaining is carried out via the
Directory System Protocol (DSP). The replication mechanism
introduced in the second edition defined yet another protocol: the
Directory Information Shadowing Protocol (DISP).
X.500 is defined in terms of the Abstract Syntax Notation (ASN.1)
[36]. This notation is used to specify the protocol
data units (PDU) of the X.500 protocols as well as the X.500
information model.
Lightweight X.500 - LDAP
Before this new service could be sucessfully implemented an important
barrier needed to be overcome: its dependency on the OSI protocol stack.
Due to being a protocol residing at the OSI application level, DAP
required a lot of resscources. But the desktop systems of the time
did not have the software or the necessary computing power to
implement the full OSI protocol stack. Since these were the systems
that should provide access to the directory, research was carried out
into finding other means of access. These development efforts resulted
in two protocols, which used the readily available TCP/IP stack: the
Directory Assistance Service (DAS) [82] and the Directory
Interface to X.500 Implemented Efficiently (DIXIE)
[29]. DIXIE had been designed at the University of Michigan
(UMich) and quickly became the protocol of choice. The disadvantage of
these two protocols was that they were built to interact with one
particular X.500 implementation3.2 of the original 1988 standard. To overcome this
restriction, members of the Open Systems Interconnection - Directory
Services (OSI-DS) working group of the Internet Engineering Task Force
(IETF) met together and developed the X.500 Lightweight
Directory Access Protocol. In July 1993 their first RFCs were
published [104,25]. This identified the Proposed
Standard for LDAPv2, which was later to be revised by the Access and
Searching of Internet Directories (ASID) working group which
eventually become a Draft Standard. The resulting RFCs
[105,26,49] were published in March 1995. LDAPv1
was never published as
RFC.
To summarize, the key aspects of LDAP in comparison with X.500 are:
-
- LDAP is run directly over TCP bypassing session and
presentation layers.
-
- While the actual messages in the LDAP protocol are still ASN.1 structures, most
protocol data elements are carried as ordinary strings.
-
- A lightweight version of BER3.3 is
used.
-
- LDAP does not support chaining. Instead, clients are directly
referred to a server, which has more information about the requested
entry.
The first implementation of LDAP was carried out at University of
Michigan and was released in mid 1992. It contained the LDAP daemon
(ldapd), i.e. a gateway that translated between LDAP and DAP (see
Figure
), a client library and also several programs,
which were built upon this library.
Figure:
LDAP as gateway to X.500
|
|
After noticing that the
overwhelming majority of queries3.4 to X.500 DSAs came via LDAP, a new server
software was written. It incorporated the actual data store mechanism
into the LDAP daemon and was named ``standalone ldap daemon'' (slapd,
see Figure
).
In addition to a performance boost this
had the convenient side effect of eliminating the need to set up and
maintain a cumbersome X.500 DSA in order to provide directory services.
Figure:
Directory architecture with standalone LDAP servers [30]
|
|
The source code for the University of Michigan software has always
been freely available. The release of the client library especially
added to the success of the software package and of LDAP in
general. This development kit made it very easy for programmers add
LDAP into their applications. (see cha:sdk)
LDAPv3
The next step in LDAP development was LDAPv3, an outcome of the
Access, Searching and Indexing of Directories (ASID) working group
within the IETF. The wide use of LDAPv2 revealed some short comings
of the protocol which were addressed by the following new features:
-
- Schema as of X.500 (93)--LDAPv3 incorporated most of the
X.500 (93) schema.
-
- Feature and schema discovery--A special entry that lists which
optional features are supported by a server was defined.
This entry is called rootDSE (DSA Specific
Entry). Furthermore a description of the schema used by the DSA was made
available to clients in another special entry--the subschema subentry.
-
- Internationalisation--LDAPv2 used T.61 as its character
set. However, in many deployments this requirement has often been
disregarded, and data was stored in the local character set.3.5 To allow all characters to be stored unambiguously, LDAPv3 uses the
UTF-8 encoding scheme of Unicode.
-
- Referrals--While they were a proprietary extension to LDAPv2 in the
University of Michigan code, referrals are now a standardized element of the protocol.
-
- SASL--The LDAP bind operation was modified to support the
Simple Authentication and Security Layer. It offers advanced
authentication mechanisms as well as integrity and privacy protection. (see Section
)
-
- Extension mechanisms--by means of extended operations and
controls. Extended operations allow for new
features to be implemented without the need to modify the protocol itself.
Existing operations may now be augmented with
controls. They allow for altering the semantics of an
operation, for example, to instruct the server to sort the result set
from of a search request before sending it to the client.
LDAPv3 maintains downward compatibility with LDAPv2, i.e. an LDAPv2
client can still access an LDAPv3 server. The RFCs defining LDAPv3 were published in December 1997:
-
- RFC 2251: ``Lightweight Directory Access Protocol (v3)''
includes the directory information model and describes the format of
the LDAP PDUs. [96]
-
- RFC 2252: ``Attribute Syntax Definitions'' defines how attribute
types and object classes are to be constructed. [94]
-
- RFC 2253: ``UTF-8 String Representation of Distinguished Names''.
[97]
-
- RFC 2254: ``A String Representation of LDAP Search Filters''.
[24]
-
- RFC 2255: ``The LDAP URL Format'' specifies how to represent
references to directory data as a Universal Resource Locater (URL). [28]
-
- RFC 2256: ``A Summary of the X.500(96) User Schema for use with LDAPv3''
lists which common X.500 schema elements should be supported by LDAP
implementations. [92]
The development effort of LDAP did not stop with the publication of
these RFCs. Two new working groups were formed in the IETF: LDAP
Duplication / Replication / Update Protocols
(LDUP3.6)
and LDAP Extension
(LDAPext3.7).
LDUP concerns itself with designing non-proprietary replication
mechanisms. Progress in this workgroup has been slow. Chartered in
1998, no document from this working group has reached RFC status yet.
Arguments centre on how to retain LDAP semantics in multi-master
environments. No unilateral agreement has been reached to date as to
how this could be achieved.
An important area of LDAPext's work is concerned with security: Although
LDAPv3 includes support for SASL, no mechanisms which avoid plain text
passwords were mandated by the 1997 RFCs. They thus carry a note of the
IESG3.8, which says that the
update operation should not be used until appropriate authentication
mechanisms have been defined. These concerns have been addressed recently.
[93] discusses which kind of protection would be needed for a specific
operation and [21] gives the details on the implementation of data
protection on the network by means of TLS (see Section
). These
additional RFCs are now considered to be part of the core standard
[20]. Other work items of LDAPext include:
-
- Access control--To define a model by which access control
information can be stored in the directory.
-
- Language tags--The definition of attribute subtypes, which identify
the language of a value.
-
- Server-side sorting and paged results--The definition of controls,
which instruct a server to sort the results of a query, or to return the
results in small parts at a time.
-
- Referral management--How to store knowledge information about data
held by other servers.
-
- APIs-- A definition of a Java API and an update of the LDAPv2 C API specification to support the
new LDAPv3 features.
-
- CLDAP--A specification of connection-less LDAP using the UDP transport layer.
In December 2000 another LDAP working group has been formed in the
IETF: LDAP (v3) Revision (LDAPbis3.9). The purpose of this working
group is to revise the current documents so that they become suitable
for being considered as ``Draft
Standard''--the
next step from ``Proposed Standard'' in the Internet Standards
Process
Text-based Standards
There were some other standards that attempted to become the ``lingua
franca'' for directory access--namely RWhois [103] and
Whois++ [7]-- but they never gained the support and
wide spread use that LDAP has. These are text-based protocols,
i.e. the data is carried over a network in human-readable form. RWhois
and Whois++ are derived from Whois [18] which itself is
a descendant of the Finger [108] protocol. [16]
One area in which the Whois protocol is still
used, is the registry service for the DNS system. But there are ongoing
experiments to store this information in LDAP servers. The company NSI maintains the
registry for the .com, .org and .net domains. Since the autumn of 2000
the Applied Research Department of VeriSign, NSI's parent company,
offers an LDAP access3.10 to
this information.
Norbert Klasen
2001-10-22