Protokol LDAPv3 (Lightweight Directory Access Protocol version 3) specifikovaný RFC-2251 a návaznými normami slouží pro práci s adresáři. Protokol LDAP vznikl zjednodušením protokolu DAP a přidáním slova Lightweight na počátek.
V praxi se s ním asi nejčastěji setkáme při vyhledávání údajů pomocí adresářových služeb. Klasickým klientem protokolu LDAP je aplikace „Adresář“. Na obr. 12-1 je okno služby „Adresář“ používané v programu Outlook Express.
Obr. 12-1 Adresář je klientem protokolu LDAP
Protokol LDAP však umožňuje údaje v adresářových službách i modifikovat, rušit, vkládat a porovnávat. Navíc LDAP server může i vrátit odkazy na jiné LDAP servery. My se soustředíme pouze na vyhledávání údajů, což je tou komplikovanější částí protokolu LDAP. Na ostatní typy práce s adresářem odkazujeme čtenáře na RFC-2251.
Pro vyhledávání v adresářových službách nejčastěji používáme anonymní přístup. Pro změnu dat však anonymní přístup určitě není tou pravou možností. Protokol LDAP umožňuje základní autentizaci jménem a heslem, avšak podobně jako u protokolu HTTP je i zde podstatně praktičtější využít SSL/TLS.
Protokol LDAP využívá jako transportní protokol TCP na portu 389/tcp. V případě SSL/TLS se využívá port 636/tcp. LDAP provozovaný přes SSL/TLS se též označuje zkratkou LDAPS.
Protokol LDAP je typu klient/server; klient si se serverem vyměňují zprávy, které využívají BER kódování. Klient posílá příkazy a server odpovídá jednou nebo více odpověďmi.
S kódováním je to ale docela v protokolu LDAP zajímavé. Anžto se jedná o zjednodušený protokol, tak i to kódování je zjednodušené. Zjednodušení nespočívá v nějakých odlišnostech kódování samotného, ale v kódování atributů (myšleno atributů jak jsme je poznali u jedinečných jmen v certifikátu), které se přenáší jako textové řetězce.
U certifikátů jsme si řekli, že jedinečné jméno je sekvencí relativních jedinečných jmen. Relativní jedinečné jméno je pak množinou atributů.
Z pohledu adresářové služby se na adresář díváme jako na kolekci položek (Entries). Každá položka je množinou atributů. Atribut je tvořen typem atributu (attribute type) a jednou nebo více hodnotami. Typ atributu jsme byli zvyklí vyjadřovat identifikátorem objektu.
A zde je právě to zmíněné zjednodušení. Identifikátory objektů (OID) protokol LDAP nekóduje do BER, jak jsme popsali v kap. 6. Identifikátory objektů se jednoduše zapisují textově čísly oddělenými tečkou. V protokolu LDAP se proto nehovoří o identifikátoru objektu, ale o typu LDAPOID, kde
LDAPOID ::= OCTET STRING
Např.
1.3.6.1.4.1.1466.1.2.3
Atributy nemusí být identifikovány pouze pomocí LDAPOID, ale též pomocí krátkých textových mnemotechnických názvů (textových řetězců). Tento typ se označuje jako LDAPDN. Např.:
cn nebo
userCertificate
Navíc za názvem může následovat středník a volby. Prakticky jedinou volbou, se kterou se seznámíme, je volba „binary“. Např.:
userCertificate;binary
Důvod je opět prostý. Hodnoty atributů se opět budou udávat jako textové řetězce. Avšak adresářové služby budou některé položky udržovat v binárním tvaru (např. certifikáty či CRL budou udržovat v kódování DER). V takovém případě se explicitně uvede, že hodnota není textová, ale binární.
Je vidět, že protokol LDAP maximálně preferuje formát, ve kterém jsou informace čitelné pro člověka.
RFC-2252 zavádí základní atributy pro protokol LDAP:
Atribut LDAPOID
=================================================================
ACI Item 1.3.6.1.4.1.1466.115.121.1.1
Access Point 1.3.6.1.4.1.1466.115.121.1.2
Attribute Type Description 1.3.6.1.4.1.1466.115.121.1.3
Audio 1.3.6.1.4.1.1466.115.121.1.4
Binary 1.3.6.1.4.1.1466.115.121.1.5
Bit String 1.3.6.1.4.1.1466.115.121.1.6
Boolean 1.3.6.1.4.1.1466.115.121.1.7
Certificate 1.3.6.1.4.1.1466.115.121.1.8
Certificate List 1.3.6.1.4.1.1466.115.121.1.9
Certificate Pair 1.3.6.1.4.1.1466.115.121.1.10
Country String 1.3.6.1.4.1.1466.115.121.1.11
DN 1.3.6.1.4.1.1466.115.121.1.12
Data Quality Syntax 1.3.6.1.4.1.1466.115.121.1.13
Delivery Method 1.3.6.1.4.1.1466.115.121.1.14
Directory String 1.3.6.1.4.1.1466.115.121.1.15
DIT Content Rule Description 1.3.6.1.4.1.1466.115.121.1.16
DIT Structure Rule Description 1.3.6.1.4.1.1466.115.121.1.17
DL Submit Permission 1.3.6.1.4.1.1466.115.121.1.18
DSA Quality Syntax 1.3.6.1.4.1.1466.115.121.1.19
DSE Type 1.3.6.1.4.1.1466.115.121.1.20
Enhanced Guide 1.3.6.1.4.1.1466.115.121.1.21
Facsimile Telephone Number 1.3.6.1.4.1.1466.115.121.1.22
Fax 1.3.6.1.4.1.1466.115.121.1.23
Generalized Time 1.3.6.1.4.1.1466.115.121.1.24
Guide 1.3.6.1.4.1.1466.115.121.1.25
IA5 String 1.3.6.1.4.1.1466.115.121.1.26
INTEGER 1.3.6.1.4.1.1466.115.121.1.27
JPEG 1.3.6.1.4.1.1466.115.121.1.28
LDAP Syntax Description 1.3.6.1.4.1.1466.115.121.1.54
LDAP Schema Definition 1.3.6.1.4.1.1466.115.121.1.56
LDAP Schema Description 1.3.6.1.4.1.1466.115.121.1.57
Master And Shadow Access Points 1.3.6.1.4.1.1466.115.121.1.29
Matching Rule Description 1.3.6.1.4.1.1466.115.121.1.30
Matching Rule Use Description 1.3.6.1.4.1.1466.115.121.1.31
Mail Preference 1.3.6.1.4.1.1466.115.121.1.32
MHS OR Address 1.3.6.1.4.1.1466.115.121.1.33
Modify Rights 1.3.6.1.4.1.1466.115.121.1.55
Name And Optional UID 1.3.6.1.4.1.1466.115.121.1.34
Name Form Description 1.3.6.1.4.1.1466.115.121.1.35
Numeric String 1.3.6.1.4.1.1466.115.121.1.36
Object Class Description 1.3.6.1.4.1.1466.115.121.1.37
Octet String 1.3.6.1.4.1.1466.115.121.1.40
OID 1.3.6.1.4.1.1466.115.121.1.38
Other Mailbox 1.3.6.1.4.1.1466.115.121.1.39
Postal Address 1.3.6.1.4.1.1466.115.121.1.41
Protocol Information 1.3.6.1.4.1.1466.115.121.1.42
Presentation Address 1.3.6.1.4.1.1466.115.121.1.43
Printable String 1.3.6.1.4.1.1466.115.121.1.44
Substring Assertion 1.3.6.1.4.1.1466.115.121.1.58
Subtree Specification 1.3.6.1.4.1.1466.115.121.1.45
Supplier Information 1.3.6.1.4.1.1466.115.121.1.46
Supplier Or Consumer 1.3.6.1.4.1.1466.115.121.1.47
Supplier And Consumer 1.3.6.1.4.1.1466.115.121.1.48
Supported Algorithm 1.3.6.1.4.1.1466.115.121.1.49
Telephone Number 1.3.6.1.4.1.1466.115.121.1.50
Teletex Terminal Identifier 1.3.6.1.4.1.1466.115.121.1.51
Telex Number 1.3.6.1.4.1.1466.115.121.1.52
UTC Time 1.3.6.1.4.1.1466.115.121.1.53
Celkový přehled atributů zavedených i jinými standardy zmiňuje RFC-2256.
Protokol LDAP používá pro textové řetězce typ LDAPstring. Jedná se o OCTET STRING, který v případě národních aplikací může obsahovat UTF8string.
Zpráva protokolu LDAP (LDAPMessage) je tvořena sekvencí skládající se ze tří částí:
Jedná se o sekvenci:
Controls ::= SEQUENCE OF Control
Kde každá položka
je sekvencí skládající se ze tří částí:
Control ::= SEQUENCE {
controlType LDAPOID,
criticality BOOLEAN DEFAULT FALSE,
controlValue OCTET STRING OPTIONAL }
Položka controlType
určuje typ atributu; položka criticality je obdobou položky critical
u certifikátu, tj. pokud má hodnotu TRUE a server by nerozpoznal toto
rozšíření, pak server musí odmítnout příkaz obsahující toto rozšíření. A
poslední položka obsahuje hodnotu příslušného rozšíření.
Vlastní zpráva protokolu LDAP má následující syntaxi:
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 }
Kde
MessageID ::=
INTEGER
Klient nejprve naváže relaci příkazem bindRequest. Během relace pak posílá serveru příkazy. Nakonec klient ukončí komunikaci příkazem unbindrequest.