GLPI : comment configurer l’authentification Active Directory en LDAPS ?
Sommaire
I. Présentation
Dans ce tutoriel, nous allons apprendre à configurer l'authentification Active Directory dans GLPI, en utilisant une connexion sécurisée en LDAPS plutôt qu'en LDAP.
Cet article est complémentaire à celui déjà disponible sur le site et qui explique l'intégration avec l'Active Directory dans son intégralité :
Pour rappel, le protocole LDAP ne bénéficie pas du chiffrement des communications, ce qui signifie que les flux transitent en clair sur le réseau. Ainsi, en capturant le trafic réseau avec une application telle que Wireshark, il est envisageable de lire le contenu des communications. Pour sécuriser les flux LDAP en environnement Active Directory, il y a plusieurs options, dont le LDAP Signing et le LDAPS basé sur l'utilisation d'un certificat TLS.
La mise en œuvre du LDAPS repose sur l'utilisation d'une autorité de certification (CA / PKI) pour obtenir un certificat TLS permettant d'authentifier le serveur. L'alternative consiste à utiliser un certificat auto-signé, afin de se passer de la nécessité d'avoir une CA. Dans les deux cas, le serveur GLPI doit avoir connaissance de ce certificat afin de pouvoir vérifier l'identité du serveur et ainsi permettre la mise en œuvre de connexions LDAPS.
II. Prérequis
Pour mettre en œuvre une connexion LDAPS entre GLPI et un annuaire Active Directory, vous devez disposer d'un certificat TLS valide, qu'il soit émis par une autorité de certification ou auto-signé.
Pour cela, vous pouvez vous aider de ces tutoriels :
- Active Directory - Comment configurer le LDAPS avec un certificat autosigné ?
- Active Directory - Comment obtenir un certificat LDAPS avec ADCS ?
De plus, votre serveur GLPI doit être capable de contacter le contrôleur de domaine Active Directory via son nom DNS, par exemple "srv-adds-01.it-connect.local". Ainsi, le serveur GLPI doit être capable de résoudre ce nom. Ceci est important puisque le nom DNS est déclaré dans le certificat. Pour cela, il convient de bien déclarer les serveurs DNS sur le serveur GLPI, ou de créer une entrée dans le fichier "hosts" du serveur pour s'appuyer sur le processus de résolution de noms local.
III. Ajouter le certificat TLS sur le serveur GLPI
Avant même de nous intéresser à la configuration de l'application GLPI en elle-même, nous devons importer le certificat TLS associé au LDAPS sur le serveur GLPI. Ici, nous verrons comment effectuer la manipulation sur un serveur Linux (en l'occurrence sous Debian).
- Si vous utilisez un certificat LDAPS auto-signé, vous devez importer directement ce certificat sur la machine Linux
- Si vous utilisez un certificat LDAPS obtenu depuis une autorité de certification ADCS, vous devez importer la chaine de certification de ce dernier sur la machine linux (et non le certificat lui-même) - concrètement, la clé publique de votre serveur ADCS racine et des serveurs intermédiaires ayant permis sa délivrance (cas des architectures en 2 ou 3 tier).
Remarque : en environnement Active Directory, si votre certificat a été émis par une autorité de certification ADCS, il sera automatiquement "reconnu" par les machines Windows du domaine. Cette précision s'adresse à ceux qui ont un serveur GLPI sous Windows Server.
S'il s'agit d'un certificat LDAPS auto-signé, voici comment l'exporter depuis le contrôleur de domaine (adaptez la valeur "CN=it-connect.local" en fonction du nom commun utilisé pour votre certificat) :
$CertLDAPS = Get-ChildItem "Cert:\LocalMachine\My\" | Where-Object { $_.Subject -eq "CN=it-connect.local" } | Get-Item
Export-Certificate -Cert $MyLDAPSCert -FilePath "C:\Cert-LDAPS-$((Get-ADDomain).DNSroot)-Public.cer"
Dans l'autre cas, vous devez exporter le certificat de la CA depuis le serveur ADCS en lui-même, via ces commandes (adaptez la valeur "CN=IT-Connect-CA-Root" car elle dépend du nom de la CA) :
$CertCA = Get-ChildItem "Cert:\LocalMachine\My\" | Where-Object { $_.Subject -match "CN=IT-Connect-CA-Root" } | Get-Item
Export-Certificate -Cert $CertCA -FilePath "C:\Cert-IT-Connect-CA-Root.cer"
Pour la suite de ce tutoriel, je vais prendre l'exemple du certificat auto-signé, mais la procédure reste la même : la seule différence étant le nom du fichier correspondant au certificat. Ainsi, la commande précédente m'a permis d'obtenir le fichier "Cert-LDAPS-it-connect.local-Public.cer".
Ensuite, vous devez copier le fichier ".cer" sur le serveur Linux. Ce fichier correspond à notre certificat. Vous pouvez utiliser WinSCP pour effectuer le transfert du fichier via SFTP ou SCP (ce qui implique d'avoir un accès SSH). Stockez ce fichier à l'emplacement de votre choix, par exemple, dans le "home" de votre utilisateur.
Puis, vous devez convertir le fichier CER au format CRT avant de l'ajouter au magasin de certificats de Linux. Positionnez le terminal dans le répertoire où se situe le fichier ".cer" puis exécutez cette commande :
openssl x509 -inform der -in Cert-LDAPS-it-connect.local-Public.cer -out Cert-LDAPS-it-connect.local-Public.crt
Une fois que c'est fait, le nouveau fichier obtenu suite à la conversion doit être copié dans le répertoire "/usr/local/share/ca-certificates/" du serveur. Vous devez disposer de privilèges élevés pour effectuer cette manipulation, car cela ajoute un nouveau certificat au magasin de la machine.
sudo cp /home/flo/Cert-LDAPS-it-connect.local-Public.crt /usr/local/share/ca-certificates/
Puis, vous devez mettre à jour le magasin des certificats :
sudo update-ca-certificates
Dans la sortie de cette commande, vous devriez voir la mention "1 added". Ceci est la preuve que le nouveau certificat a été pris en charge.
IV. Tester la connexion LDAPS
Avant de passer à la configuration de GLPI, nous allons voir comment tester la connexion LDAPS vers notre contrôleur de domaine. Ceci va nous permettre de valider l'importation du certificat.
Pour cela, nous pouvons utiliser l'outil "ldapsearch" qu'il est possible d'installer via ce paquet :
sudo apt-get install ldap-utils
La commande ci-dessous permet de tenter une connexion LDAPS (donc sur le port 636) sur le DC nommé "srv-adds-01.it-connect.local". L'authentification auprès de l'annuaire sera effectuée avec le compte "Sync_GLPI", donc nous précisons son DistinguishedName. Puis, nous cherchons à récupérer tous les utilisateurs présents sous la base "OU=Personnel,DC=it-connect,DC=local".
ldapsearch -H ldaps://srv-adds-01.it-connect.local:636 -x -W -D "CN=Sync_GLPI,OU=Connecteurs,DC=it-connect,DC=local" -b "OU=Personnel,DC=it-connect,DC=local"
Suite à l'exécution de cette commande, un mot de passe est demandé. Il s'agit de celui du compte "Sync_GLPI".
Enter LDAP Password:
Puis, si la connexion est établie avec succès, la commande ldapsearch retourne le contenu de l'annuaire Active Directory. Voici un exemple :
Quelques précisions sur les options utilisées :
- -D : DistinguishedName de l'utilisateur qui doit être utilisé pour s'authentifier auprès de l'annuaire Active Directory.
- -x : authentification simple.
- -W : demander à ce que le mot de passe soit saisit de façon interactive.
- -b : base DN pour la recherche des objets dans l'annuaire (DistinguishedName de la racine sur laquelle se positionner pour effectuer la recherche).
Le test s'étant correctement déroulé, nous pouvons passer à la suite... Si vous rencontrez un problème, ajoutez le paramètre "-d1" pour activer le mode debug et obtenir des détails sur l'erreur rencontrée. La commande deviendra alors :
ldapsearch -H ldaps://srv-adds-01.it-connect.local:636 -x -W -d1 -D "CN=Sync_GLPI,OU=Connecteurs,DC=it-connect,DC=local" -b "OU=Personnel,DC=it-connect,DC=local"
V. Configuration du LDAPS sur GLPI
Vous voici à l'étape tant attendue : la configuration de GLPI. Accédez à la configuration d'un annuaire LDAP dans la section "Authentification" présente dans le menu "Configuration" afin d'ajouter un nouvel annuaire ou de modifier un annuaire déjà déclaré, dans le cas où vous souhaitez faire évoluer une configuration existante.
Si vous avez besoin d'aide sur ce point, référez-vous au tutoriel mentionné en introduction, car il explique tout en détail.
Pour déclarer un annuaire LDAP en effectuant une connexion en LDAPS, il convient de configurer deux champs d'une façon bien précise : "Serveur" et "Port".
- Serveur : il convient d'indiquer le nom DNS complet du contrôleur de domaine, en ajoutant le préfixe "ldaps://". Par exemple : "ldaps://srv-adds-01.it-connect.local". N'utilisez pas une adresse IP, cela ne fonctionnera pas.
- Port : il convient d'indiquer "636" car c'est le numéro de port utilisé par le protocole LDAPS.
Attention, dans l'onglet "Informations avancées", vous ne devez pas activer l'option "Utiliser TLS". Ceci correspond à un autre cas d'usage. Vous devez configurer uniquement les deux options susmentionnées.
Dès que la configuration est effectuée, sauvegardez et cliquez sur "Tester" sur la gauche. Puis, une nouvelle fois sur le bouton "Tester" afin d'établir un test de connexion. Si cela ne fonctionne pas, redémarrez le serveur GLPI : c'est ce que j'ai eu à faire pour ma part, car un reload du serveur Apache2 n'a pas suffi. Ensuite, testez de nouveau.
Si la connexion ne fonctionne pas, vérifiez votre configuration et consultez les journaux Apache2.
sudo tail -f /var/log/apache2/error.log
À titre d'information, quand la connexion est opérationnelle, une capture du trafic avec Wireshark permet de voir que les communications entre GLPI et le DC sont bien effectuées via le protocole LDAPS. Sur l'image ci-dessus, l'adresse IP "192.168.10.18" correspond au serveur GLPI tandis que l'adresse IP "192.168.10.101" correspond à "srv-adds-01.it-connect.local".
VI. Conclusion
En suivant ce tutoriel, vous devriez être en mesure d'établir une connexion LDAPS entre l'application GLPI et votre annuaire Active Directory ! La clé de la réussite étant l'importation du certificat TLS sur le serveur GLPI.
Bonjour,
Stagiaire sur la sécurisation AD d’une entreprise, je suis passé par la migration LDAPS de GLPI…
Une petite difficulté sans expérience ni doc à jour sur leur wiki ! 2 mois après cette migration… voilà votre article qui m’aurait bien aidé !
Seule différence, j’ai fait le choix d’utiliser LDAP sur TLS ce qui ne change rien en pratique, et j’ai automatisé le renouvellement des certificats sur la machine.
Merci pour vos articles toujours d’une grande qualité !