12       LDAP

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.