This shows you the differences between two versions of the page.
saisp:labs:02:contents:07 [2014/03/01 22:21] razvan.deaconescu created |
saisp:labs:02:contents:07 [2014/03/03 00:19] (current) razvan.deaconescu [07. Configurare suport SSL/TLS] |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ==== 07. Configurare suport SSL/TLS ==== | + | ==== 07. [15p] Configurare suport SSL/TLS ==== |
- | TODO | + | Pentru a securiza comunicația cu serverul de LDAP avem două opțiuni |
+ | - configurarea suportului SSL, adică LDAPS | ||
+ | - configurarea suportului de TLS | ||
+ | |||
+ | 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:<code> | ||
+ | SLAPD_SERVICES="ldap:/// ldapi:/// ldaps:///" | ||
+ | </code> | ||
+ | |||
+ | Apoi repornim serverul de LDAP<code bash> | ||
+ | root@ldap-client:~# service slapd restart | ||
+ | [ ok ] Stopping OpenLDAP: slapd. | ||
+ | [ ok ] Starting OpenLDAP: slapd. | ||
+ | </code> și urmărim dacă acum ascultă conexiuni LDAPS (pe portul ''636''):<code bash> | ||
+ | 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 | ||
+ | </code> | ||
+ | |||
+ | Cu toate acestea, dacă încercăm să ne conectăm la server folosind LDAPS obținem eroare:<code bash> | ||
+ | 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) | ||
+ | </code> | ||
+ | |||
+ | 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 [[https://wiki.debian.org/Self-Signed_Certificate#STEP_2|aici]]. Vom rula comanda:<code bash> | ||
+ | root@ldap-client:~# openssl req -new -x509 -days 365 -nodes -out /etc/ssl/certs/slapd-cert.pem -keyout /etc/ssl/private/slapd-key.pem | ||
+ | [...] | ||
+ | </code> | ||
+ | |||
+ | 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 [[https://wiki.debian.org/LDAP/OpenLDAPSetup#Configuring_LDAPS|aici]]. Vom crea un fișier LDIF și în cadrul acestuia vom preciza directivele ''olcTLSCertificateKeyFile'' respectiv ''olcTLSCertificateFile'':<file note slapd-config-tls.ldif> | ||
+ | dn: cn=config | ||
+ | changetype: modify | ||
+ | add: olcTLSCertificateKeyFile | ||
+ | olcTLSCertificateKeyFile: /etc/ssl/private/slapd-key.pem | ||
+ | - | ||
+ | add: olcTLSCertificateFile | ||
+ | olcTLSCertificateFile: /etc/ssl/certs/slapd-cert.pem | ||
+ | </file> | ||
+ | |||
+ | Încărcăm apoi acest fișier în baza de date de configurare internă a serverului LDAP:<code bash> | ||
+ | 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" | ||
+ | </code> și verificăm informațiile prezente acum în baza de date<code bash> | ||
+ | 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 | ||
+ | </code> | ||
+ | |||
+ | Î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<code bash> | ||
+ | root@ldap-client:~# adduser openldap ssl-cert | ||
+ | </code> | ||
+ | și apoi să repornim serviciul:<code bash> | ||
+ | root@ldap-client:~# service slapd restart | ||
+ | [ ok ] Stopping OpenLDAP: slapd. | ||
+ | [ ok ] Starting OpenLDAP: slapd. | ||
+ | </code> | ||
+ | |||
+ | După aceasta vom putea folosi URI de tipul LDAPS pentru a interoga serverul de LDAP local:<code bash> | ||
+ | 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 | ||
+ | </code> | ||
+ | |||
+ | 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:<code bash> | ||
+ | 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 | ||
+ | </code> | ||
+ | |||
+ | Acum serverul funcționează corespunzător cu suport SSL (LDAPS) și TLS. |