Pentru a securiza comunicația cu serverul de LDAP avem două opțiuni
Pentru configurarea suportului de SSL, edităm în fișierul /etc/default/slapd
linia care conține directiva SLAPD_SERVICES
. Linia trebuie să ajungă la forma:
SLAPD_SERVICES="ldap:/// ldapi:/// ldaps:///"
Apoi repornim serverul de LDAP
root@ldap-client:~# service slapd restart [ ok ] Stopping OpenLDAP: slapd. [ ok ] Starting OpenLDAP: slapd.
și urmărim dacă acum ascultă conexiuni LDAPS (pe portul 636
):
root@ldap-client:~# netstat -tlpn | grep slapd tcp 0 0 0.0.0.0:636 0.0.0.0:* LISTEN 3620/slapd tcp 0 0 0.0.0.0:389 0.0.0.0:* LISTEN 3620/slapd tcp6 0 0 :::636 :::* LISTEN 3620/slapd tcp6 0 0 :::389 :::* LISTEN 3620/slapd
Cu toate acestea, dacă încercăm să ne conectăm la server folosind LDAPS obținem eroare:
root@ldap-client:~# ldapsearch -x -LLL -H ldaps://localhost -b "dc=tasks,dc=cs,dc=pub,dc=ro" dn ldap_sasl_bind(SIMPLE): Can't contact LDAP server (-1)
Acest lucru este datorat absenței certificatelor SSL. Ca să rezolvăm acest lucru, generăm un certificat SSL self-signed, urmărind indicațiile de aici. Vom rula comanda:
root@ldap-client:~# openssl req -new -x509 -days 365 -nodes -out /etc/ssl/certs/slapd-cert.pem -keyout /etc/ssl/private/slapd-key.pem [...]
Introduceți în cadrul comenzii de mai sus opțiunile utile. Acum cheia privată este generată în fișierul /etc/ssl/private/slapd-key.pem
, iar cheia publică este generată în fișierul /etc/ssl/certs/slapd-cert.pem
.
Acum trebuie să configurăm serverul de LDAP pentru a folosi certificatele. Vom urmări indicațiile de aici. Vom crea un fișier LDIF și în cadrul acestuia vom preciza directivele olcTLSCertificateKeyFile
respectiv olcTLSCertificateFile
:
dn: cn=config changetype: modify add: olcTLSCertificateKeyFile olcTLSCertificateKeyFile: /etc/ssl/private/slapd-key.pem - add: olcTLSCertificateFile olcTLSCertificateFile: /etc/ssl/certs/slapd-cert.pem
Încărcăm apoi acest fișier în baza de date de configurare internă a serverului LDAP:
root@ldap-client:~# ldapmodify -Y EXTERNAL -H ldapi:/// -f slapd-config-tls.ldif SASL/EXTERNAL authentication started SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth SASL SSF: 0 modifying entry "cn=config"
și verificăm informațiile prezente acum în baza de date
root@ldap-client:~# ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -s base -b "cn=config" SASL/EXTERNAL authentication started SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth SASL SSF: 0 dn: cn=config objectClass: olcGlobal cn: config olcArgsFile: /var/run/slapd/slapd.args olcLogLevel: none olcPidFile: /var/run/slapd/slapd.pid olcToolThreads: 1 olcTLSCertificateKeyFile: /etc/ssl/private/slapd-key.pem olcTLSCertificateFile: /etc/ssl/certs/slapd-cert.pem
În baza de date internă de configurare sunt prezente acum cheia privată și certificatul SSL utile pentru funcționarea LDAPS și LDAP+TLS. Va trebui să acordăm serverului LDAP acces la cheia privată folosind comanda
root@ldap-client:~# adduser openldap ssl-cert
și apoi să repornim serviciul:
root@ldap-client:~# service slapd restart [ ok ] Stopping OpenLDAP: slapd. [ ok ] Starting OpenLDAP: slapd.
După aceasta vom putea folosi URI de tipul LDAPS pentru a interoga serverul de LDAP local:
root@ldap-client:~# ldapsearch -x -LLL -H ldaps://localhost -b dc=tasks,dc=cs,dc=pub,dc=ro dn dn: dc=tasks,dc=cs,dc=pub,dc=ro dn: cn=admin,dc=tasks,dc=cs,dc=pub,dc=ro
Pe această configurație putem verifica și conexiunea folosind TLS. URI-ul de conectare la server este același ca în cazul nesecurizat, dar folosim opțiunea -Z
pentru a activa suportul TLS:
root@ldap-client:~# ldapsearch -x -Z -LLL -H ldap://localhost -b dc=tasks,dc=cs,dc=pub,dc=ro dn dn: dc=tasks,dc=cs,dc=pub,dc=ro dn: cn=admin,dc=tasks,dc=cs,dc=pub,dc=ro
Acum serverul funcționează corespunzător cu suport SSL (LDAPS) și TLS.