Installation d’un serveur LDAP (openLDAP) avec SSL/TLS activé

No Gravatar

Après de multiples errements, et quelques bonnes prises de têtes, nous avons réussi à mettre en place un LDAP sécurisé.

Pour s’authentifier, il est mieux d’utiliser l’encryption avecle  Transport Layer Security (TLS) et/ou le Secure Sockets Layer (SSL).

Les mots de passe ne circuleront donc plus en clair sur le réseau interne lorsque vous saisissez vos identifiants mail, ce qui est une sécurité supplémentaire toujours bonne à prendre.

Quelques informations sur l’installation, on ne sais jamais, ca peut intéresser quelqu’un !

Je présupose dans ce tutorial que vous avez installé le logiciel libre openLDAP, et que vous l’avez peuplé avec les informations utilisateurs.

Si ce n’est pas le cas, je vous renvoie à ce très bon tutorial sur lequel je me suis largement basé pour ma configuration : https://help.ubuntu.com/10.04/serverguide/C/openldap-server.html

Dans le cas d’ubuntu ou d’une débian, pensez à vérifier comment est compilé votre openLDAP.Effectivement, les certificats créés via OpenSSL n’étant pas compatible avec ceux créés par GnuTLS par exemple.

Pour savoir quel est votre installation vous pouvez utiliser l’outil ldd sur l’executable :

ldd /usr/sbin/slapd

Dans notre cas il renvoie le texte suivant :

    linux-gate.so.1 =>  (0xb78c9000)
libldap_r-2.4.so.2 => /usr/lib/libldap_r-2.4.so.2 (0xb787c000)
liblber-2.4.so.2 => /usr/lib/liblber-2.4.so.2 (0xb7870000)
libdb-4.8.so => /usr/lib/libdb-4.8.so (0xb7709000)
libodbc.so.1 => /usr/lib/libodbc.so.1 (0xb76a3000)
libslp.so.1 => /usr/lib/libslp.so.1 (0xb7693000)
libsasl2.so.2 => /usr/lib/libsasl2.so.2 (0xb767c000)
libgnutls.so.26 => /usr/lib/libgnutls.so.26 (0xb75e4000)
libcrypt.so.1 => /lib/i686/cmov/libcrypt.so.1 (0xb75b2000)
libresolv.so.2 => /lib/i686/cmov/libresolv.so.2 (0xb759d000)
libltdl.so.7 => /usr/lib/libltdl.so.7 (0xb7595000)
libwrap.so.0 => /lib/libwrap.so.0 (0xb758d000)
libpthread.so.0 => /lib/i686/cmov/libpthread.so.0 (0xb7574000)
libc.so.6 => /lib/i686/cmov/libc.so.6 (0xb742e000)
libnsl.so.1 => /lib/i686/cmov/libnsl.so.1 (0xb7416000)
libdl.so.2 => /lib/i686/cmov/libdl.so.2 (0xb7412000)
libtasn1.so.3 => /usr/lib/libtasn1.so.3 (0xb7402000)
libz.so.1 => /usr/lib/libz.so.1 (0xb73ee000)
libgcrypt.so.11 => /usr/lib/libgcrypt.so.11 (0xb737a000)
/lib/ld-linux.so.2 (0xb78ca000)
libgpg-error.so.0 => /usr/lib/libgpg-error.so.0 (0xb7375000)

Dans notre cas nous avons un openLDAP compilé avec GnuTLS, donc nous allons utiliser l’outil certtool du package gnutls-bin

sudo apt-get install gnutls-bin

Nous allons ensuite créer les certificats dans le répertoire


cd /etc/ssl/
mkdir myKey
cd myKey/

Attention, à la création des certificats, des informations vont vous êtres demandés, pensez à bien renseigner votre CN = {nom de votre domaine} (par exemple dans notre cas, {nom_de_votre_serveur}.parisgeo.cnrs.fr avec {nom_de_votre_serveur} = test)

Deux fichier *.info doivent être préalablement créés :

touch ca.info
touch {nom_de_votre_serveur}.info

ca.info contient :

cn = {nom_de_votre_domaine}
ca
cert_signing_key

{nom_de_votre_serveur}.info contient :

organization = Nom de votre organisation
cn = {nom_de_votre_domaine}
tls_www_server
encryption_key
signing_key

Voici les commandes pour la création des certificats auto-signés (en attendant mieux …) :


sh -c "certtool --generate-privkey > /etc/ssl/myKey/cakey.pem"

certtool --generate-self-signed --load-privkey /etc/ssl/myKey/cakey.pem --template /etc/ssl/myKey/ca.info --outfile /etc/ssl/myKey/cacert.pem

sh -c "certtool --generate-privkey > /etc/ssl/myKey/{nom_de_votre_serveur}_slapd_key.pem"

certtool --generate-certificate --load-privkey /etc/ssl/myKey/localhost_slapd_key.pem  --load-ca-certificate /etc/ssl/myKey/cacert.pem --load-ca-privkey /etc/ssl/myKey/cakey.pem  --template /etc/ssl/myKey/{nom_de_votre_serveur}.info --outfile /etc/ssl/myKey/{nom_de_votre_serveur}_slapd_cert.pem

Nous allons maintenant créer le fichier qui permet d’activer le TLS/SSL sur votre LDAP, ici  tls-config.ldif :

cd /etc/ldap/
touch tls-config.ldif

On copie les informations suivantes dans le fichier :

nano /etc/ldap/myKey/tls-config.ldif
Attention !! Si vous avez un certificat auto-signé (ce qui est notre cas) alors pensez à enlever les trois premières lignes du texte concernant la propriété olcTLSCACertificateFile ci dessous, sinon GnuTLS vous renverra une bien belle erreur …

dn: cn=config
add: olcTLSCACertificateFile
olcTLSCACertificateFile: /etc/ssl/myKey/cacert.pem
dn: cn=config
add: olcTLSCertificateFile
olcTLSCertificateFile: /etc/ssl/myKey/{nom_de_votre_serveur}_slapd_cert.pem
dn: cn=config
add: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/ssl/myKey/{nom_de_votre_serveur}_slapd_key.pem

Ensuite on modifie la configuration de l’annuaire ldap avec la commande suivante :


ldapmodify -QY EXTERNAL -H ldapi:/// -f tls-config.ldif

Pensez également à modifier le fichier  slapd qui initialise la configuration par défault du serveur, en commentant/decommentant les lignes SLAPD_SERVICES pour qu’elles activent l’url ldaps://

nano /etc/default/slapd
SLAPD_SERVICES="ldap://127.0.0.1:389/ ldaps:/// ldapi:///"
#SLAPD_SERVICES="ldap:/// ldapi:///"

Changez les droits de la clé pour qu’elle soit lisible par le groupe ssl-cert :

sudo adduser openldap ssl-cert
sudo chgrp ssl-cert /etc/ssl/myKey/{nom_de_votre_serveur}_slapd_key.pem
sudo chmod g+r /etc/ssl/myKey/{nom_de_votre_serveur}_slapd_key.pem

Après un restart, on peut vérifier la présence d’un serveur écoutant sur le port 636, qui correspond au port sécurisé pour le SSL accessible via l’url ldaps://

service slapd restart
netstat -tunlp | grep slapd

La configuration du client se fait via le fichier ldap.conf de ce même répertoire /etc/ldap/ldap.conf :

BASE {votre base pour le LDAP, par exemple dc=example,dc=com}
URI ldaps://localhost
TLS_CACERT /etc/ssl/myKey/cacert.pem
TLS_REQCERT demand

Pour tester que tout marche bien, on force la recherche sur le ldap sécurisé, via l’option -ZZ qui force l’emploi du mode de connexion :

ldapsearch -x -LLL -ZZ -d 150

Pour activer le log, et changer le niveau (plus d’information ici http://www.zytrax.com/books/ldap/ch6/#logfile )

nano /etc/rsyslog.conf

Vous ajoutez la ligne suivante au fichier :

local4.* /var/log/ldap.log 

Ensuite on créé le fichier de log, et on redemarre le serveur :

touch /var/log/ldap.log
service rsyslog restart

Ensuite pour changer de niveau de log :

cd /etc/ldap/
touch log-config.ldif
nano log-config.ldif
dn: cn=config
replace: olcLogLevel
olcLogLevel: {Votre niveau de log}

 

Pour choisi le niveau de log, je vous renvois à cet excellent tutorial : http://www.zytrax.com/books/ldap/ch6/#logfile

Voilà, en esperant que ce tutorial vous aurez été utile je reste à l’écoute de vos commentaires sur ce blog si vous avez des questions !

 

One comment


  • emmanuel Lécharny

    Intéressant !

    Petite remarque : LDAPS ne devrait plus être utilisé. Il existe une requête LDAP permettant de basculer en mode sécurisé sur le même port d’écoute que le protocole LDAP : startTLS. Cela permetd e n’être en sécurisé que le temps nécessaire, et évite de déclarer un port complémentaire. C’est dailleurs la méthode préconisée (LDAPS est considéré comme deprecated : http://www.openldap.org/faq/data/cache/605.html)

    quelques typos :
    par 2 : avecle (manque un espace)
    par 5 : présupose (2 p)
    par 7 : compatible (s)
    note sur les certificats : être ne prend pas de s, demandé(e)s
    avant dernier par : choisi(r) / je vous renvoie (pas s)

    12 décembre 2011

Leave a comment


Name*

Email(will not be published)*

Website

Your comment*

Submit Comment

© Copyright Services Géographie-Cités - Designed by Pexeto