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
Proudly powered by Pelican, which takes great advantage of Python.