Prérequis à cet article, vous devez avoir installé OpenLdap. N’ayez crainte, l’installation prend 5 minutes et l’ensemble des actions à réaliser est disponible dans mon article
Installation de OpenLDAP sous Linux en 5 minutes.
Comme vous vous en doutez, lors de l'authentification à un serveur OpenLDAP, il est préférable de le faire en utilisant une session cryptée, l’objectif étant de ne plus faire « voyager » les mots de passe en clair entre les serveurs mais de chiffrer les échanges. Ce petit miracle peut être accompli en utilisant TLS (Transport Layer Security). Le protocole TLS se charge de mettre en oeuvre la confidentialité des communications sur Internet. Le protocole permet aux applications client / serveur de communiquer de manière à empêcher l'espionnage ou a falsification des messages échangés.
Je vous propose un petit schéma "maison" pour vous expliquer le processus de connexion et les différents étapes. Avec ça, vous n'aurez plus d'excuse pour dire que vous ne comprenez pas :)

Petite "explication de texte" :
| Message |
Signification |
| StartTLS Request |
Demande de création d'une connexion chiffrée par une couche TLS émanant du client. |
| StartTLS Response |
Réponse de la demande de création d'une connexion par couche TLS |
| Handshake TLS |
L'échange de clés : Le client vérifie la validité du certificat serveur. Si le certificat est valide, génère une clé maître , la chiffre à l’aide de la clé publique du serveur et la lui envoie. Les données échangées par la suite entre le client et le serveur sont chiffrées et authentifiées à l’aide de clés dérivées de la clé maître. |
| bindRequest |
Demande la connexion à un annuaire |
| bindResponse |
Réponse à la demande d'authentification |
| searchRequest |
Demande à effectuer une recherche en fonction d'un filtre donné |
| searchResDone |
Message indiquant la fin des réponses à une recherche |
| unbindRequest |
Demande de déconnexion/fin de session |
Maintenant que les présentations sont faites, nous pouvons attaquer la sécurisation de notre serveur Ldap !
Etape 1 : Création des clés et certificats
Pour les besoins de cet article, nous allons nous transformer en autorité de certification pour crée et signer le certificat serveur qui sera déployer sur notre OpenLdap. Pour ça nous allons utiliser l’outil certtool.
Première étape, installer GnuTLS. Le paquet GnuTLS contient des bibliothèques et des outils pour gérer TLS :
apt-get install gnutls-bin ssl-cert
Nous avons les outils, nous pouvons créer une clé privée :
certtool --generate-privkey > /etc/ssl/private/cakey.pem
Puis créons le template utilisé pour renseigner de façon automatique les champs nécessaires à la création du CA . Pour cela, créez un fichier ca.info dans /etc/ssl/ (ou à l’endroit de votre choix) et ajoutez les 3 lignes suivantes :
cn=CA Nicolas HOUSSET Trust
ca
cert_signing_key
Et maintenant nous pouvons créer notre certificate CA en se basant sur notre clé et les informations du fichier /etc/ssl/ca.info. Ce certificat sera utilisé pour signer le certificat serveur. Pour cela nous utilisons l’instruction --generate-self-signed et les paramètres idoines :
certtool --generate-self-signed --load-privkey /etc/ssl/private/cakey.pem --template /etc/ssl/ca.info
--outfile /etc/ssl/certs/cacert.pem
Ensuite, nous générons une clé privé nih_slapd_key.pem pour notre serveur openldap, en utilisant generate-privkey :
certtool --generate-privkey -bits 1024 --outfile /etc/ssl/private/nih_slapd_key.pem
Puis, nous pouvons créer le certificat serveur :
Comme pour notre CA nous partons d'un fichier template /etc/ssl/nih.info contenant les informations suivantes :
organization = Nicolas Housset LDAP Server france
cn = ldap-france.nicolas-housset.fr
tls_www_server
encryption_key
signing_key
expiration_days = 360
Veillez à ce que la propriété cn soit bien le nom de votre serveur
Maintenant, on génère notre certificat serveur via la commande generate-certificate :
certtool --generate-certificate --load-privkey /etc/ssl/private/nih_slapd_key.pem --load-ca-certificate /etc/ssl/certs/cacert.pem --load-ca-privkey /etc/ssl/private/cakey.pem --template /etc/ssl/nih.info --outfile /etc/ssl/certs/nih_slapd_cert.pem
Etape 2 : Configuration de OpenLdap
Nous devons maintenant activer l'option LDAPS dans la configuration de l'annuaire OpenLDAP afin que e daemon slapd puisse écouter et servir ses requêtes sur le port 636 dédié à LDAP :
Dans le fichier
/etc/default/slapd, localisez la ligne suivante
SLAPD_SERVICES="ldap:/// ldapi:///"
et remplacez par :
SLAPD_SERVICES="ldap:/// ldaps:/// ldapi:///"
Maintenant, créez le fichier
certinfo.ldif avec le contenu suivant (Ajustez les valeurs en conséquence) :
dn: cn=config
add: olcTLSCACertificateFile
olcTLSCACertificateFile: /etc/ssl/certs/cacert.pem
-
add: olcTLSCertificateFile
olcTLSCertificateFile: /etc/ssl/certs/nih_slapd_cert.pem
-
add: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/ssl/private/nih_slapd_key.pem
Et "injectez" le tout dans votre configuration ldap :
ldapmodify -Y EXTERNAL -H ldapi:/// -f /etc/ssl/certinfo.ldif
Dernière étape, donnez les droits qui vont bien aux fichiers :
adduser openldap ssl-cert
chgrp ssl-cert /etc/ssl/private/nih_slapd_key.pem
chmod g+r /etc/ssl/private/nih_slapd_key.pem
chmod o-r /etc/ssl/private/nih_slapd_key.pem
Pour terminer, relancer le serveur Openldap :
/etc/init.d/slapd restart
Dernier petit détail, vérifiez que le process est en écoute sur le port ldaps :
netstat –a
ce qui vous donne en sortie (si tout va bien )
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 *:12320 *:* LISTEN
tcp 0 0 *:12321 *:* LISTEN
tcp 0 0 *:ldap *:* LISTEN
tcp 0 0 *:ssh *:* LISTEN
tcp 0 0 *:ldaps *:* LISTEN
Enfin, si vous voulez être "
ceinture/bretelles", vous pouvez jetez un coup d’œil aux logs afin de s'assurer qu'il n'y pas a de gros pépin :
tail /var/log/sldap.log
Tout va bien :
Jun 7 15:21:42 ldap slapd[24247]: @(#) $OpenLDAP: slapd (Sep 11 2015 15:18:47) $#012#011buildd@x86-csail-01:/build/openldap-e51fz0/openldap-2.4.31/debian/build/servers/slapd
Jun 7 15:21:43 ldap slapd[24248]: slapd starting
Maintenant j'espère que cet article vous aura aidé à comprendre le fonctionnent de OpenLdap dans un contexte sécurisé et comment mettre en oeuvre cette sécurisation. Oui ? N'hésitez pas à publier un petit commentaire et à partager sur les réseaux sociaux.