Configurer OpenLDAP avec SSL/TLS
Introduction
Cet article est une simple traduction de cette source : Configuring OpenLDAP with SSL/TLS on Debian, légèrement réactualisé pour coller aux évolutions de debian.
L’objectif est de configurer notre serveur OpenLDAP pour supporter le chiffrement SSL/TLS.
Il est recommandé de crypter les communications entre les clients et le serveur LDAP. Avant d’activer le cryptage pour le serveur LDAP, nous avons besoin de disposer d’une clé privée SSL et d’un certificat signé par une autorité de certification. Pour ce faire vous pouvez vous reporter à un post précédent.
Configuration serveur
Supposons que nous disposons des fichiers suivants :
- ldap.example.fr-key.pem
- ldap.example.fr-cert.pem
On installe le certificat de l’autorité de certification :
cp ~/ca/demoCA/cacert.pem /etc/ssl/certs/
chmod go+r /etc/ssl/certs/cacert.pem
On copie la clé et le certificat LDAP dans le répertoire /etc/ldap/ssl :
mkdir /etc/ldap/ssl/
cp ~/ca/ldap.example.fr-*.pem /etc/ldap/ssl/
On sécurise les certificats :
ldap1:~# chown -R root:openldap /etc/ldap/ssl
ldap1:~# chmod -R o-rwx /etc/ldap/ssl
On active le protocole LDAPS dans le fichier /etc/default/slapd :
LAPD_SERVICES="ldap://127.0.0.1:389/ ldaps:/// ldapi:///"
On créée le fichier de configuration TLS ( tls-config.ldif ):
dn: cn=config
add: olcTLSCACertificateFile
olcTLSCACertificateFile: /etc/ssl/certs/cacert.pem
-
add: olcTLSCertificateFile
olcTLSCertificateFile: /etc/ldap/ssl/ldap.example.fr-cert.
pem
-
add: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/ldap/ssl/ldap.example.fr-key.pem
On l’applique :
ldapmodify -QY EXTERNAL -H ldapi:/// -f tls-config.ldif
On redémarre slapd:
systemctl restart slapd.service
On s’assure que le service est bien démarré :
ss -tunlp | grep slapd
tcp 0 0 0.0.0.0:636 0.0.0.0:* LISTEN 2462/slapd
tcp 0 0 127.0.0.1:389 0.0.0.0:* LISTEN 2462/slapd
Si on utilise nftables pour inspecter et filtrer le trafic réseau, il convient de rajouter une instruction pour autoriser la connexion au serveur ldap. On édite le fichier /etc/nftables.conf
table ip filter {
chain input {
...
# ldap
iifname "eth0" ip saddr 192.168.0.0/24 tcp dport 636 accept
...
}
}
Configuration du client
Installer le paquet ldap-utils :
apt-get install ldap-utils
On édite le fichier de configuration /etc/ldap/ldap.conf
BASE dc=dev,dc=local
URI ldaps://ldap.example.fr
TLS_CACERT /etc/ssl/certs/cacert.pem
TLS_REQCERT demand
On s’assure que tout fonctionne :
ldapsearch -x
Maintenant, on devrait voir dans les logs du serveur que les communications s’effectuent sur le port TCP 636 :
ldap1 slapd[2462]: conn=1005 fd=15 ACCEPT from IP=192.168.0.1:38344 (IP=0.0.0.0:636)
ldap1 slapd[2462]: conn=1005 fd=15 TLS established tls_ssf=128 ssf=128
ldap1 slapd[2462]: conn=1005 op=0 BIND dn="" method=128
ldap1 slapd[2462]: conn=1005 op=0 RESULT tag=97 err=0 text=
ldap1 slapd[2462]: conn=1005 op=1 SRCH base="dc=example,dc=fr" scope=2 deref=0 filter="(objectClass=*)"
ldap1 slapd[2462]: conn=1005 op=1 SEARCH RESULT tag=101 err=0 nentries=6 text=
ldap1 slapd[2462]: conn=1005 op=2 UNBIND
ldap1 slapd[2462]: conn=1005 fd=15 closed