LDAP replika CentOS 5.8 - Directory Server - LDAPS vs LDAP+StartTLS

Sziasztok,

CentOS 5.8 + Directory Server 8.2 (LDAP)
probalok rajonni, hogy is mukodnek a kulcsok LDAP/LDAPS authentifikacio eseten LDAP kliensre.

Ha jol ertem az LDAPS a 636-os porton kommunikal, es az LDAP a 389-en.
secure 389 esetere kell a Start TLS beallitas.
Jol ertelmezem ezt?
ldap kliensen (RHEL 5.5 + openldap) ket ldap.conf letezik ldaps://xx.xx.xx.xx PLUSZ nehany TLS parameter.

A 2. kerdesem az lenne, miert vannak itt ezek a TLS parameterek, ha csupan csak ldaps 636-on kommunikal az LDAP kliens?

Beallitasok a kliensen:

cat /etc/ldap.conf
ssl on
#ssl no
tls_cacertdir /etc/openldap/cacerts
pam_password md5
uri ldaps://xx.xx.xx.xx/ ldaps://yy.yy.yy.yy/ #<----bellitva, hogy LDAPS legyen
base dc=aa,dc=aaaa,dc=com
# Added manually
nss_base_passwd ou=People,dc=aa,dc=aaaa,dc=com?one?accessentrylevel=valamixx
nss_base_group ou=Group,dc=aa,dc=aaaa,dc=com?one
tls_checkpeer no
#tls_checkpeer yes
#tls_reqcert demand #<----ezt probaltam
tls_reqcert never

cat /etc/openldap/ldap.conf
#
# LDAP Defaults
#

# See ldap.conf(5) for details
# This file should be world readable but not world writable.

#BASE dc=example, dc=com
#URI ldap://ldap.example.com ldap://ldap-master.example.com:666

#SIZELIMIT 12
#TIMELIMIT 15
#DEREF never
TLS_CACERTDIR /etc/openldap/cacerts
URI ldaps://xx.xx.xx.xx/
BASE dc=aa,dc=aaaa,dc=com
#TLS_REQCERT allow
#TLS_REQCERT demand
TLS_REQCERT never

Hogy a kerdesem bonyolodjon:
Az LDAP szerver (xx.xx.xx.xx) replikaja egy letezo LDAP szervernek (primary yy.yy.yy.yy) es igy secondary LDAP szerverkent mukodik.
Ax LDAP xx.xx.xx.xx szerveren generalva vannak a CA Certificate a Server-Cert kulcsok.
A Public key kopirozva a kliensre a /etc/openldap/cacerts konyvtarba.

De akar ebben a konyvtarban is volt a kulcs, vagy azon kivul,
minkdet esetben be tudtam jelentkezni a kliensre LDAP felhasznalokent.
Beallitottam ekkor: TLS_REQCERT demand (hogy mindig ellenorizze a kulcsot).
Egyetlem esetben nem mukodott az autentikacio: ha /etc/ldap.conf : 'tls_checkpeer yes' erteket hasznaltam.

Tesztelve mindket esetben:
a)public key a /etc/openldap/cacerts konyvtarban volt es
b) azon kivul

Picit sok a beallitas, azt hiszem, mar en is belebonyolodtam. :-))

Tudna nekem ebben valaki segiteni?
Koszonom,

Ardi

Hozzászólások

Ha nem is mindenre, de pár kérdésre:

Az ldaps:// uri az SSL és a 636-os port, ldap:// URI az 389, TLS vagy anélkül, de az openldap kliens /etc/openldap/ldap.conf-jában nincs hozzá "force TLS" szerű opció, így mondjuk egy ldapsearchnél -Z vagy -ZZ paraméterrel lehet működésre bírni.

A másik ldap.conf (az /etc/ldap.conf) az nss_ldaphpoz és a pam_ldaphoz tartozik, ott pl. TLS az "ssl start_tls" opcióval kényszeríthető ki. Jó hülyén sikerült ez így, két ugyanolyan nevű konfigfálj két más szoftverhez. De mondjuk mostanában az nss_ldap helyett inkább már sssd-t vagy nss_ldapd-t lehet használni.
Az ldaps elvileg deprecated már, persze attól még működik.

A certekkel kapcsolatban nem értem, hogy te most kliens oldali TLS authentikációt akarsz? Vagy csak a megszokott TLS/SSL-el titkosított ldap kapcsolatot, ahol ha bejelentkezésre kerül a sor, akkor a hagyományos simple vagy SASL bind-et használod (ami kb. név+jelszó).

Koszi szepen az infot.

>A másik ldap.conf (az /etc/ldap.conf) az nss_ldaphpoz és a pam_ldaphoz tartozik, ott pl. TLS az "ssl >start_tls" opcióval kényszeríthető ki.

ez azt jelenti, hogy ha hasznalom ezt az opciot, es ldaps:// ldap://-ra valo atiras utan mindket ldap.conf fajlban a 389-es porton menne a kommunikacio?
Fuggetlenul attol, milyen beallitas van az LDAP szerveren?

>A certekkel kapcsolatban nem értem, hogy te most kliens oldali TLS authentikációt akarsz? Vagy csak a >megszokott TLS/SSL-el titkosított ldap kapcsolatot, ahol ha bejelentkezésre kerül a sor, akkor a >hagyományos simple vagy SASL bind-et használod (ami kb. név+jelszó).

Az igazat megvallva nem ertem teljesen, mely esetben hasznalja a kliens a szerver publikus kulcsat,
ha azt az /etc/openldap/cacerts konyvtarba teszem es hasznalom a 'tls_cacertdir /etc/openldap/cacerts'
opciot az /etc/ldap.conf fajlban?

Ardi

ez azt jelenti, hogy ha hasznalom ezt az opciot, es ldaps:// ldap://-ra valo atiras utan mindket ldap.conf fajlban a 389-es porton menne a kommunikacio?
Fuggetlenul attol, milyen beallitas van az LDAP szerveren?

"ssl start_tls" csak a nss_ldaphoz tartozó konfig fáljban van...
Szóval a "getent passwd" parancs az TLS-t fog használni ezután, ha beleírod.
ldapsearchnel meg pl.:

ldapsearch -h host -ZZ ....

Ha a szerver megegedi az ldaps-t akkor a TLS-t is meg szokta. Fordítva már nem biztos, ldapst nem kell megengedni, ha csak TLS-t akarsz.

Az igazat megvallva nem ertem teljesen, mely esetben hasznalja a kliens a szerver publikus kulcsat,
ha azt az /etc/openldap/cacerts konyvtarba teszem es hasznalom a 'tls_cacertdir /etc/openldap/cacerts'
opciot az /etc/ldap.conf fajlban?

A cacertsben a CA tanúsítványa van, azaz az, aki aláírta a szerver publikus kulcsát.
Amúgy ennek ellenőrzését meg a TLS_REQCERT [never|allow|try|hard] beállítás szolgálja, az ldap kliens konfig fájlban.
Az /etc/ldap.conf-ban meg a tls_checkpeer szolgál ugyanerre.

Szia Zsugabubus,

koszi a hozzaszolasodat.
Visszaterve a hozzaszolasodra (es atnezve a szrver+kliens beallitasait) a kovetkezo a helyzet:

-A kliensek a 636-os porton LDAPS-on keresztul kommunikalnak a szerverrel.
-Nincs start tls beiras a kliens ldap.conf fajljaiban (sem az /etc/ sem pedig az /etc/openldap konyvtarban).
-Amikor a szervert allitottam be, a https://access.redhat.com/knowledge/docs/en-US/Red_Hat_Directory_Server…
14.2.3.1 Enabling TLS/SSL Only in the Directory Server - pontja szerint jartam el.
(lasd a 2.,4.,7.,8. pont alatti kepeket is!)
A 8. pont alatti kep szerint beallitottam az: "Allow client authentication" opciot, melyhez a kep alatt
levo leiras szerint ez vonatkozik:

>
Allow client authentication. This is the default setting. With this option,
authentication is performed on the client's request. For more information
about certificate-based authentication,
see Section 14.2.10, “Using Certificate-Based Authentication”.

link a 14.2.10-re: https://access.redhat.com/knowledge/docs/en-US/Red_Hat_Directory_Server…

A problemam az, hogy be tudok jelentkezni a kliens gepre LDAP login+psw segitsegevel
mindket esetben is, ha:
a) a szerver CA cert file-ja a /etc/openldap/cacerts konyvtarban volt
b) vagy azon kivul (/etc/openldap) (+service nscd restart).

Azt gondoltam, ha a tanusitvany nem lesz az /etc/openldap/cacerts konyvtarban, akkor nem tudok bejelentkezni.

Akkor hogy is van ez? Mit allithattam be rosszul?
Miert van szukseg TLS_REQCERT [parametere] beallitasok valamelyire?
Ez nem arra az esetre szukseges, ha nem LDAPS (636-os port)-ot, hanem LDAP+StartTLS (389-es port)-ot
hasznalok?
Mellesleg probaltam TLS_REQCERT 'never' es 'demand' opciot is - nem okozott gondot az LDAP login+psw-os bejelentkezes.

Koszonom elore a segitseget.

Ardi

Megjegyzes: Hasznaltam a kliensrol az: openssl s_client –connect xx.xx.xx.xx:636 parancsot es megkaptam a szerver tanusitvanyat:

kliensgep#openssl s_client -connect xx.xx.xx.xx:636
CONNECTED(00000003)
depth=1 /CN=CAcert
verify error:num=19:self signed certificate in certificate chain
verify return:0
---
Certificate chain
0 s:/CN=Directory Server/CN=hostname.xx.lab
i:/CN=CAcert
1 s:/CN=CAcert
i:/CN=CAcert
---
Server certificate
-----BEGIN CERTIFICATE-----
torolve <--------------------------------------------- itt van a tanusitvany
-----END CERTIFICATE-----
subject=/CN=Directory Server/CN=hostname.xx.lab
issuer=/CN=CAcert
---
Acceptable client certificate CA names
/CN=CAcert
---
SSL handshake has read 1055 bytes and written 331 bytes
---
New, TLSv1/SSLv3, Cipher is AES256-SHA
Server public key is 1024 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
Protocol : TLSv1
Cipher : AES256-SHA
Session-ID: torolve
Session-ID-ctx:
Master-Key: torolve
Key-Arg : None
Krb5 Principal: None
Start Time: 1349088629
Timeout : 300 (sec)
Verify return code: 19 (self signed certificate in certificate chain)

A TLS_REQCERT-nek semmi köze ahhoz, hogy SSL-t vagy TLS-t használsz, mindkettőnél ugyanazt jelenti, és most itt nincs is rá szükség.

Ha azt akarod, hogy loginnál a kliens mindig ellenőrizze a szervert, akkor a pam_ldap és nss_ldap beállítása szükséges:
- a CA cert-jét lerakod valahova
- /etc/ldap.conf-ban beállítod, hogy "tls_checkpeer yes" és a "tls_cacertdir=/konyvtar/ahova/tetted/a/ca/certet" vagy "tls_cacertfile=/a/ca/cert.file". Fontos, hogy world-readable legyen, lévén az nss_ldapot bármely user használhatja.
- ugyanide, ha ssl-t akarsz használni a 636-on, akkor "ssl on", ha TLS-t a 389-en, akkor "ssl start_tls"

Szóval nem a szerver publikus kulcsát (azt a TLS/SSL handshakenél úgyis elkéri a szervertől), hanem a CA tanúsítványát kell mondjuk a cacerts könyvtárba tenni (a nevében benne is van), az /etc/ldap.conf-ot be kell állítani, és ennyi.
(Amúgy a tls_checkpeer defaultja az, ami a TLS_REQCERT, de ne bonyolítsuk...)

Szia Zsugabubus,

koszi a sorokat - probaltam beirni es hasznalni a szerver CA tanusitvanyat.
A szerver /etc/dirsrv/slapd-xxx konyvtaraban kiirtam a letezo tanusitvanyokat:

#certutil -L -d .

Certificate Nickname Trust Attributes
SSL,S/MIME,JAR/XPI

CA certificate CTu,u,u
myserver-Server-Cert u,u,u

majd a kovetkezo paranccsal egy fajlba irtam azt:
#certutil -L -d . -n "CA certificate" > cacert.asc

es tartalmat:

more cacert.asc
-----BEGIN CERTIFICATE-----
e resz torolve - a kulcs
-----END CERTIFICATE-----

tettem a kliens /etc/openldap/cacerts konyvtaraba myserver.pm nev alatt

mindket ldap.conf fajlban
tls_cacertdir /etc/openldap/cacerts
tls_reqcert demand
illetve extrakent meg az /etc/ldap.conf fajlba ezt irva:

tls_checkpeer yes

majd 'service nscd restart' utan LDAP userkent be akartam jelentkezni, de allandoan a jelszot kerte, amit megadtam, de nem engedett be.

Szoval valami meg hianyzik, de nem tudok rajonni, micsoda...

ardi

Szerintem próbálgasd az ldap utilokkal, pl. ldapsearch. Ezek alapbeállításait tartalmazza az /etc/openldap/ldap.conf. Ha ez már megy/érthető, akkor ugorj az nss_ és pam_ dolgaira.

Amúgy...
/etc/ldap.conf:
tls_cacertdir
tls_checkpeer

/etc/openldap/ldap.conf:
TLS_CACERTDIR
TLS_REQCERT

A kettő teljesen más, csak a név ugyanaz! (Elég barom módon).