Subsections
Conformance and Interoperability
Interoperability Tests
Unfortunately, conformance to a standard is no guarantee that two
different implementations will inter-operate with each other. In
practice, standards suffer from errata or wordings that can be
interpreted in different ways.10.1
The Open Group Directory Interoperability
Forum10.2 holds the
annual DirConnect conference where directory vendors come
together to test the interoperability of their products. To provide
some guidance for these tests, the Basic LDAPv3 Interoperability
Test Suite (BLITS)10.3 is being
used. The Open Group also offers the The Open Brand for LDAP
2000 certificate. This certificate is awarded to directory servers,
which pass the VSLDAP [89] test suite.
Another implementation of BLITS is available from Public Works and
Government Services of
Canada10.4. This Test Suite
Utility (TSU) implements a subset of BLITS version 2.3 and additionally,
the EuroSInet interoperability test for LDAPv2
[11] and X.500 (93) [10] are
supported.
A subset of BLITS has also been used in compiling the overview presented in
the next chapter.
Supported features in DSAs
The tables (Figure
and Figure
)
on the following two pages show which features the directory servers
that have been introduced in cha:linux,
and
support.
Support for standard schema items
To evaluate how the different directory servers support the schema items
defined for X.500 [44] and their application in LDAP
[92], a migration of the AMBIX10.5 data set was attempted. The data is currently mastered
in a slapd from the University of Michigan LDAP 3.3 distribution, which only
supports LDAPv2 and does only minimal verification of attribute
syntaxes.10.6 Therefore, the data had
to be cleaned up first before it could be imported to an LDAPv3 compliant
server. All entries and attributes that did not match the following schema
items were removed to find a common ground. To structure the DIT, ``country'',
``locality'', ``organization'' and ``organizationalUnit'' as well as the
auxiliary object class ``labeledUriObject'' were used. All entries referring
to person have been modified to fit the ``inetOrgPerson'' object class
[86]. Where non-ASCII characters appeared, the attribute value has
been converted to the UTF-8 encoding as required by LDAPv3. Additionally,
German Umlauts, which had been converted to the expanded representation, have
been converted back to their canonical form for most non-ambiguous cases,
e.g. from ``Universitaet'' to ``Universität''.
An initial attempt to load this data into eDirectory resulted in a
large number of errors. Organizational units in Germany tend to have
names, which are quite long. However, [44, Annex C]
specifies that values of the ``ou'' attribute may at most have 64
characters. The same problems exist for the ``businessCategory''
attribute, whose length restriction of 128 characters could also be
easily violated. eDirectory and Active Directory strictly uphold these
restrictions. A manual relaxation is not possible. SecureWay Directory
limits ``ou'' to 128 characters.10.7 To allow
further testing, all organizations and organizational units that did
not meet the length restrictions were removed along with any
``person'' entries stored below them. While such a procedure is acceptable
for a test, the need to include these organizations would preclude the
use of Active Directory or eDirectory as a directory server for AMBIX.
Additionally, the following directory server specific problems were
encountered:
-
- Active Directory
In Active Directory many of the standard attributes were
redefined to be single-valued instead of multi-valued. This included
``commonName'', ``givenName'', ``telephoneNumber'' and ``mail'',
common attributes that often do have multiple values. In addition, if a
multi-valued attribute is used to name an entry, the value used in
the RDN has to appear before any other value of the same attribute.
Active Directory does not include the ``inetOrgPerson'' object class
by default. Instead, the ``contact'' object class is intended to be
used. However, a ``contact'' entry was not allowed below an
``organization'' or ``organizationalUnit'' entry. The
containment rules for these object classes were therefore
changed. Furthermore, ``locality'' was added to the possible
superiors of ``organization''.
As Active Directory only supports auxiliary object classes by
binding them to a structural object class. The ``labeledUri''
attribute was therefore added to the ``locality'', ``o'', ``ou'' and
``contact'' attributes. ``businessCategory'', which is an attribute
of ``inetOrgPerson'' was also added to ``contact.
-
- eDirectory
To allow ``inetOrgPerson'' entries to be added below a ``locality''
entry, the schema had to be modified. Novell offers a downloadable
file, which contains schema extensions and mapping changes to
implement the ``inetOrgPerson'' object class separate from the NDS
``user'' object
class.10.8 This file also makes the required changes to the containment rules.
SASL GSSAPI
A special interest during this thesis has been taken in the interoperability
of the SASL GSSAPI mechanism for Kerberos (GSS-KRB5). The following products
with support for this feature were identified:
-
- Windows 2000. GSS-KRB5 is supported in Active Directory and the
client library.
-
- Windows 2000 Kerberos interoperability tools for Unix
[66]. A GSS-KRB5 library is provided in source
code. It requires the source code release of the Netscape LDAP C SDK
(Mozilla) and MIT Kerberos 1.1 to build.
-
- OpenLDAP. GSS-KRB5 is supported in the directory server and in client
library with the help of the Cyrus-SASL library and a Kerberos 5
implementation (MIT or Heimdal).
-
- SecureWay Directory. GSS-KRB5 is supported in the directory
server and in client library (Windows platform only).
-
- JNDI. The GSS-KRB5
mechanism10.9 is implemented
using the JCSI cryptographic toolkit10.10.
Based on the GSS-KRB5 mechanism for JNDI, a SASL mechanism that works with
Netscape Directory SDK for Java was implemented in the frame of this thesis.
Figure:
LDAP GSSAPI Interoperability Matrix
| [IMAGE png] |
Figure
shows the results from the
interoperability tests conducted during this thesis. The following problems were
identified:10.11
-
(113)
- Active Directory returned an empty
serverSaslCreds10.12 string instead of
omitting this optional element. This was unusual but was not a direct
violation of the protocol. A patch for OpenLDAP was developed in the
frame of this thesis and submitted for
inclusion.10.13
-
(114)
- Active Directory disregarded the client's maximum buffer
size. This would becomes a problem, if security layers were
negotiated and large result sets were returned. An workaround would to
increase the client's maximum buffer size.
-
(115)
- The Cyrus-SASL library employed by OpenLDAP had the maximum
buffer size values hard coded to 0x0FFFFF. A patch has been proposed
to the Cyrus-SASL mailing list.10.14
-
(116)
- By default, the Windows 2000 client library for LDAP uses the
GSS-SPNEGO [2] SASL mechanism to negotiate the GSSAPI
mechanism for use. However, it generated an incorrect encoding of the
mechanism OID for GSS-KRB5. This problem can be circumvented by using
ldap_set_option to set the preferred SASL mechanism to
GSSAPI.
-
(117)
- [93] specifieds that the SASL
service name for LDAP is ldap, i.e. in lower-case. The
respective Kerberos principal should therefore be ldap/host.domain@REALM. While
Active Directory ignores case, the Windows 2000 client library
as well as the SecureWay server and the client library create and accept only
the upper-case form LDAP/host.domain@REALM.
By patching LDAP_PLUGIN_IBM_GSSKRB.DLL the SecureWay
client could be modified to use the lower-case form. At an offset of
0x3F55 LDAP@ had to be changed to ldap@.
-
(118)
- Due to a bug in the Java environment
for Windows10.15, no security layers were supported.
-
(119)
- The GSSAPI security layer was not supported in SecureWay
Directory. Connections were not encrypted.
-
(120)
- Additionally to an external security layer provided by SSL or
TLS, OpenLDAP tried to establish a SASL security layer. Active
Directory claims to support this but actually does not. The
connection therefore stalled after the security layer was
negotiated. A workaround would have been to set the maximum SASL
security strength factor to zero. (Use
-O maxssf=0 for the OpenLDAP
command-line tools.)
Norbert Klasen
2001-10-22