introduction
OpenLDAP fournit un service d'annuaire LDAP flexible et bien pris en charge. Toutefois, le serveur lui-même communique via une connexion Web non cryptée. Dans ce guide, nous montrerons comment chiffrer les connexions à OpenLDAP à l'aide de STARTTLS pour mettre à niveau les connexions conventionnelles vers TLS. Nous utiliserons Ubuntu 14.04 comme serveur LDAP.
Conditions préalables
Avant de commencer avec ce guide, vous devez avoir un utilisateur non root avecsudo
configuré sur votre serveur. Pour configurer un utilisateur de ce type, suivez nosUbuntu 14.04 initial setup guide.
Nous expliquerons comment installer OpenLDAP sur un serveur Ubuntu 14.04 dans ce guide. Si OpenLDAP est déjà installé sur votre serveur, vous pouvez ignorer les étapes d'installation et de configuration appropriées.
LDAP sur SSL vs LDAP avec STARTTLS
Il existe deux manières de chiffrer les connexions LDAP avec SSL / TLS.
Traditionnellement, les connexions LDAP qui devaient être chiffrées étaient gérées sur un port distinct, généralement636
. La connexion entière serait encapsulée avec SSL / TLS. Ce processus, appelé LDAP sur SSL, utilise le protocoleldaps://
. Cette méthode de cryptage est maintenant obsolète.
STARTTLS est une approche alternative qui est maintenant la méthode préférée pour chiffrer une connexion LDAP. STARTTLS "met à niveau" une connexion non chiffrée en l'enveloppant avec SSL / TLS après / pendant le processus de connexion. Cela permet aux connexions non cryptées et cryptées d'être gérées par le même port. Ce guide utilisera STARTTLS pour chiffrer les connexions.
Définition du nom d'hôte et du nom de domaine complet
Avant de commencer, nous devons configurer notre serveur afin qu’il résolve correctement son nom d’hôte et son nom de domaine complet (FQDN). Cela sera nécessaire pour que nos certificats soient validés par les clients. Nous supposerons que notre serveur LDAP sera hébergé sur une machine avec le FQDN deldap.example.com
.
Pour définir le nom d'hôte à tous les emplacements appropriés sur votre serveur, utilisez la commandehostnamectl
avec l'optionset-hostname
. Définissez le nom d'hôte sur le nom d'hôte abrégé (n'incluez pas le composant du nom de domaine):
sudo hostnamectl set-hostname ldap
Ensuite, nous devons définir le FQDN de notre serveur en nous assurant que notre fichier/etc/hosts
contient les informations correctes:
sudo nano /etc/hosts
Trouvez la ligne qui mappe l'adresse IP de127.0.1.1
. Remplacez le premier champ après l'adresse IP par le nom de domaine complet du serveur et le second par le nom d'hôte abrégé. Pour notre exemple, cela ressemblerait à quelque chose comme ceci:
/etc/hosts
. . .
127.0.1.1 ldap.example.com ldap
127.0.0.1 localhost
. . .
Enregistrez et fermez le fichier lorsque vous avez terminé.
Vous pouvez vérifier que vous avez correctement configuré ces valeurs en tapant:
hostname
Cela devrait retourner votre nom d'hôte court:
nom d'hôte abrégé
ldap
Vérifiez le nom de domaine complet en tapant:
hostname -f
Cela devrait renvoyer le nom de domaine complet:
Paramètre FQDN
ldap.example.com
Installation du serveur LDAP et du logiciel GnuTLS
Après avoir vérifié que votre nom d’hôte est correctement défini, nous pouvons installer le logiciel dont nous avons besoin. Si vous avez déjà installé et configuré OpenLDAP, vous pouvez ignorer la première sous-section.
Installer le serveur OpenLDAP
Si vous n'avez pas déjà installé OpenLDAP, il est temps de résoudre ce problème. Mettez à jour l’index de paquet local de votre serveur et installez le logiciel en tapant:
sudo apt-get update
sudo apt-get install slapd ldap-utils
Vous serez invité à fournir un mot de passe administratif LDAP. N'hésitez pas à ignorer l'invite, car nous procéderons à la reconfiguration immédiatement après.
Afin d’accéder à certaines invites supplémentaires dont nous avons besoin, nous reconfigurerons le paquet après l’installation. Pour ce faire, tapez:
sudo dpkg-reconfigure slapd
Répondez correctement aux invites en utilisant les informations ci-dessous comme point de départ:
-
Omettre la configuration du serveur OpenLDAP? No (nous voulons une base de données et une configuration initiales)
-
Nom de domaine DNS:
example.com
(utilisez le nom de domaine du serveur, moins le nom d'hôte. Ceci sera utilisé pour créer l'entrée de base pour l'arborescence d'informations) -
Nom de l'organisation:Example Inc (Ceci sera simplement ajouté à l'entrée de base en tant que nom de votre organisation)
-
Mot de passe administrateur: [comme vous le souhaitez]
-
Confirmer le mot de passe: [doit correspondre à ce qui précède]
-
Backend de base de données à utiliser:HDB (sur les deux choix, celui-ci a le plus de fonctionnalités)
-
Voulez-vous que la base de données soit supprimée lorsque slapd est purgé? (votre choix. Choisissez «Oui» pour permettre une suppression totalement propre, choisissez «Non» pour enregistrer vos données même lorsque le logiciel est supprimé.
-
Déplacer l'ancienne base de données? Yes
-
Autoriser le protocole LDAPv2? No
Installer les composants SSL
Une fois votre serveur OpenLDAP configuré, nous pouvons installer les packages que nous utiliserons pour chiffrer notre connexion. Le paquet Ubuntu OpenLDAP est compilé avec les bibliothèques SSL de GnuTLS. Nous allons donc utiliser GnuTLS pour générer nos informations d'identification SSL:
sudo apt-get install gnutls-bin ssl-cert
Avec tous nos outils installés, nous pouvons commencer à créer les certificats et les clés nécessaires pour chiffrer nos connexions.
Créer les modèles de certificat
Pour chiffrer nos connexions, nous devons configurer une autorité de certification et l'utiliser pour signer les clés du ou des serveurs LDAP de notre infrastructure. Ainsi, pour la configuration de notre serveur unique, nous aurons besoin de deux jeux de paires clé / certificat: un pour l'autorité de certification elle-même et un autre associé au service LDAP.
Pour créer les certificats nécessaires à la représentation de ces entités, nous allons créer des fichiers de modèle. Ceux-ci contiendront les informations dont l'utilitairecerttool
a besoin pour créer des certificats avec les propriétés appropriées.
Commencez par créer un répertoire pour stocker les fichiers de modèle:
sudo mkdir /etc/ssl/templates
Créer le modèle de CA
Créez d'abord le modèle pour l'autorité de certification. Nous appellerons le fichierca_server.conf
. Créez et ouvrez le fichier dans votre éditeur de texte:
sudo nano /etc/ssl/templates/ca_server.conf
Il suffit de fournir quelques informations pour créer avec succès une autorité de certification. Nous devons spécifier que le certificat sera destiné à une CA (autorité de certification) en ajoutant l'optionca
. Nous avons également besoin de l'optioncert_signing_key
pour donner au certificat généré la possibilité de signer des certificats supplémentaires. Nous pouvons définir lescn
sur le nom descriptif que nous souhaitons pour notre autorité de certification:
caserver.conf
cn = LDAP Server CA
ca
cert_signing_key
Enregistrez et fermez le fichier.
Créer le modèle de service LDAP
Ensuite, nous pouvons créer un modèle pour notre certificat de serveur LDAP appeléldap_server.conf
. Créez et ouvrez le fichier dans votre éditeur de texte avec les privilègessudo
:
sudo nano /etc/ssl/templates/ldap_server.conf
Ici, nous allons fournir quelques informations différentes. Nous fournirons le nom de notre organisation et définirons les optionstls_www_server
,encryption_key
etsigning_key
afin que notre certificat dispose des fonctionnalités de base dont il a besoin.
Lescn
dans ce modèlemust correspondent au FQDN du serveur LDAP. Si cette valeur ne correspond pas, le client rejettera le certificat du serveur. Nous définirons également la date d'expiration du certificat. Nous allons créer un certificat de 10 ans pour éviter de devoir gérer des renouvellements fréquents:
ldapserver.conf
organization = "Example Inc"
cn = ldap.example.com
tls_www_server
encryption_key
signing_key
expiration_days = 3652
Enregistrez et fermez le fichier lorsque vous avez terminé.
Créer une clé et un certificat CA
Maintenant que nous avons nos modèles, nous pouvons créer nos deux paires clé / certificat. Nous devons d'abord créer l'ensemble de l'autorité de certification.
Utilisez l'utilitairecerttool
pour générer une clé privée. Le répertoire/etc/ssl/private
est protégé des utilisateurs non root et est l'emplacement approprié pour placer les clés privées que nous allons générer. Nous pouvons générer une clé privée et l'écrire dans un fichier appeléca_server.key
dans ce répertoire en tapant:
sudo certtool -p --outfile /etc/ssl/private/ca_server.key
Nous pouvons maintenant utiliser la clé privée que nous venons de générer et le fichier modèle créé dans la dernière section pour créer le certificat d'autorité de certification. Nous écrirons ceci dans un fichier du répertoire/etc/ssl/certs
appeléca_server.pem
:
sudo certtool -s --load-privkey /etc/ssl/private/ca_server.key --template /etc/ssl/templates/ca_server.conf --outfile /etc/ssl/certs/ca_server.pem
Nous avons maintenant la paire clé privée / certificat pour notre autorité de certification. Nous pouvons l'utiliser pour signer la clé qui sera utilisée pour chiffrer la session LDAP.
Créer une clé de service LDAP et un certificat
Ensuite, nous devons générer une clé privée pour notre serveur LDAP. Nous mettrons à nouveau la clé générée dans le répertoire/etc/ssl/private
pour des raisons de sécurité et appellerons le fichierldap_server.key
pour plus de clarté.
Nous pouvons générer la clé appropriée en tapant:
sudo certtool -p --sec-param high --outfile /etc/ssl/private/ldap_server.key
Une fois que nous avons la clé privée du serveur LDAP, nous avons tout ce dont nous avons besoin pour générer un certificat pour le serveur. Nous devrons importer presque tous les composants que nous avons créés jusqu’à présent (le certificat et la clé de l’autorité de certification, la clé du serveur LDAP et le modèle de serveur LDAP).
Nous allons mettre le certificat dans le répertoire/etc/ssl/certs
et le nommerldap_server.pem
. La commande dont nous avons besoin est:
sudo certtool -c --load-privkey /etc/ssl/private/ldap_server.key --load-ca-certificate /etc/ssl/certs/ca_server.pem --load-ca-privkey /etc/ssl/private/ca_server.key --template /etc/ssl/templates/ldap_server.conf --outfile /etc/ssl/certs/ldap_server.pem
Autoriser OpenLDAP à accéder à la clé de serveur LDAP
Nous avons maintenant tous les certificats et les clés dont nous avons besoin. Cependant, actuellement, notre processus OpenLDAP ne pourra pas accéder à sa propre clé.
Un groupe appeléssl-cert
existe déjà en tant que propriétaire du groupe du répertoire/etc/ssl/private
. Nous pouvons ajouter l'utilisateur sous lequel notre processus OpenLDAP s'exécute (openldap
) à ce groupe:
sudo usermod -aG ssl-cert openldap
Maintenant, notre utilisateur OpenLDAP a accès à l’annuaire. Nous devons encore donner à ce groupe la propriété du fichierldap_server.key
afin que nous puissions autoriser l'accès en lecture. Donnez au groupessl-cert
la propriété de ce fichier en tapant:
sudo chown :ssl-cert /etc/ssl/private/ldap_server.key
Maintenant, donnez au groupessl-cert
un accès en lecture au fichier:
sudo chmod 640 /etc/ssl/private/ldap_server.key
Notre processus OpenSSL peut maintenant accéder au fichier de clé correctement.
Configurer OpenLDAP pour utiliser le certificat et les clés
Nous avons nos fichiers et avons correctement configuré l'accès aux composants. Maintenant, nous devons modifier notre configuration OpenLDAP pour utiliser les fichiers que nous avons créés. Pour ce faire, nous allons créer un fichier LDIF avec nos modifications de configuration et le charger dans notre instance LDAP.
Accédez à votre répertoire personnel et ouvrez un fichier appeléaddcerts.ldif
. Nous allons mettre nos changements de configuration dans ce fichier:
cd ~
nano addcerts.ldif
Pour effectuer des modifications de configuration, nous devons cibler l'entréecn=config
du DIT de configuration. Nous devons spécifier que nous souhaitons modifier les attributs de l'entrée. Ensuite, nous devons ajouter les attributsolcTLSCACertificateFile
,olcCertificateFile
etolcCertificateKeyFile
et les définir aux emplacements de fichier corrects.
Le résultat final ressemblera à ceci:
addcerts.ldif
dn: cn=config
changetype: modify
add: olcTLSCACertificateFile
olcTLSCACertificateFile: /etc/ssl/certs/ca_server.pem
-
add: olcTLSCertificateFile
olcTLSCertificateFile: /etc/ssl/certs/ldap_server.pem
-
add: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/ssl/private/ldap_server.key
Enregistrez et fermez le fichier lorsque vous avez terminé. Appliquez les modifications à votre système OpenLDAP à l'aide de la commandeldapmodify
:
sudo ldapmodify -H ldapi:// -Y EXTERNAL -f addcerts.ldif
Nous pouvons recharger OpenLDAP pour appliquer les modifications:
sudo service slapd force-reload
Nos clients peuvent désormais crypter leurs connexions au serveur via le port classiqueldap://
en utilisant STARTTLS.
Configuration des ordinateurs clients
Pour se connecter au serveur LDAP et lancer une mise à niveau STARTTLS, les clients doivent avoir accès au certificat de l'autorité de certification et demander la mise à niveau.
Sur le serveur OpenLDAP
Si vous interagissez avec le serveur OpenLDAP à partir du serveur lui-même, vous pouvez configurer les utilitaires client en copiant le certificat de l'autorité de certification et en ajustant le fichier de configuration du client.
Copiez tout d'abord le certificat CA du répertoire/etc/ssl/certs
dans un fichier du répertoire/etc/ldap
. Nous appellerons ce fichierca_certs.pem
. Ce fichier peut être utilisé pour stocker tous les certificats d’autorité de certification auxquels les clients de cette machine peuvent souhaiter accéder. Pour nos besoins, cela ne contiendra qu'un seul certificat:
sudo cp /etc/ssl/certs/ca_server.pem /etc/ldap/ca_certs.pem
Nous pouvons maintenant ajuster le fichier de configuration système pour les utilitaires OpenLDAP. Ouvrez le fichier de configuration dans votre éditeur de texte avec les privilègessudo
:
sudo nano /etc/ldap/ldap.conf
Ajustez la valeur de l'optionTLS_CACERT
pour pointer vers le fichier que nous venons de créer:
/etc/ldap/ldap.conf
. . .
TLS_CACERT /etc/ldap/ca_certs.pem
. . .
Enregistrez et fermez le fichier.
Vous devriez maintenant pouvoir mettre à jour vos connexions pour utiliser STARTTLS en passant l'option-Z
lors de l'utilisation des utilitaires OpenLDAP. Vous pouvez forcer la mise à niveau de STARTTLS en la transmettant deux fois. Testez ceci en tapant:
ldapwhoami -H ldap:// -x -ZZ
Cela force une mise à niveau STARTTLS. Si cela réussit, vous devriez voir:
STARTTLS succès
anonymous
Si vous avez mal configuré quelque chose, vous verrez probablement une erreur comme celle-ci:
Échec STARTTLS
ldap_start_tls: Connect error (-11)
additional info: (unknown error code)
Configuration des clients distants
Si vous vous connectez à votre serveur OpenLDAP à partir de serveurs distants, vous devrez effectuer un processus similaire. Tout d'abord, vous devez copier le certificat de l'autorité de certification sur l'ordinateur client. Vous pouvez le faire facilement avec l'utilitairescp
.
Transfert de clés SSH au client
Si vous vous connectez à votre serveur OpenLDAP à l'aide de clés SSH et que votre ordinateur client est également distant, vous devrez les ajouter à un agent et les transférer lors de la connexion à votre ordinateur client.
Pour ce faire, sur votre ordinateur local, démarrez l'agent SSH en tapant:
eval $(ssh-agent)
Ajoutez votre clé SSH à l'agent en tapant:
ssh-add
Maintenant, vous pouvez transférer vos clés SSH lorsque vous vous connectez à votre machine client LDAP en ajoutant l'indicateur-A
:
ssh -A user@ldap_client
Copier le certificat de l'autorité de certification
Une fois que vous êtes connecté au client OpenLDAP, vous pouvez copier le certificat de l'autorité de certification en tapant:
scp [email protected]:/etc/ssl/certs/ca_server.pem ~/
Maintenant, ajoutez le certificat copié à la liste des certificats d’AC connus du client. Ceci ajoutera le certificat au fichier s’il existe déjà et le créera s’il ne le fait pas:
cat ~/ca_server.pem | sudo tee -a /etc/ldap/ca_certs.pem
Ajuster la configuration du client
Ensuite, nous pouvons ajuster le fichier de configuration globale pour les utilitaires LDAP pour qu'il pointe vers notre fichierca_certs.pem
. Ouvrez le fichier avec les privilègessudo
:
sudo nano /etc/ldap/ldap.conf
Recherchez l'optionTLS_CACERT
et définissez-la sur le fichierca_certs.pem
:
/etc/ldap/ldap.conf
. . .
TLS_CACERT /etc/ldap/ca_certs.pem
. . .
Enregistrez et fermez le fichier lorsque vous avez terminé.
Testez la mise à niveau de STARTTLS en tapant ceci:
ldapwhoami -H ldap://ldap.example.com -x -ZZ
Si la mise à niveau de STARTTLS est réussie, vous devriez voir:
STARTTLS succès
anonymous
Forcer les connexions à utiliser TLS (facultatif)
Nous avons correctement configuré notre serveur OpenLDAP afin qu’il puisse mettre à niveau de manière transparente les connexions LDAP normales vers TLS via le processus STARTTLS. Toutefois, cela autorise toujours les sessions non chiffrées, ce qui peut ne pas être ce que vous voulez.
Si vous souhaitez forcer les mises à niveau STARTTLS pour chaque connexion, vous pouvez ajuster les paramètres de votre serveur. Nous n'appliquerons cette exigence qu'au DIT normal, pas au DIT de configuration accessible sous l'entréecn=config
.
Tout d'abord, vous devez trouver l'entrée appropriée à modifier. Nous allons imprimer une liste de tous les DIT (arborescences d’annuaire: les hiérarchies d’entrées gérées par un serveur LDAP) sur lesquelles le serveur OpenLDAP a des informations, ainsi que l’entrée configurant chaque DIT.
Sur votre serveur OpenLDAP, tapez:
sudo ldapsearch -H ldapi:// -Y EXTERNAL -b "cn=config" -LLL -Q "(olcSuffix=*)" dn olcSuffix
La réponse devrait ressembler à ceci:
DIT servis par OpenLDAP
dn: olcDatabase={1}hdb,cn=config
olcSuffix: dc=example,dc=com
Vous pouvez avoir plus de paires DIT et base de données si votre serveur est configuré pour gérer plusieurs DIT. Ici, nous avons un seul DIT avec l'entrée de base dedc=example,dc=com
, qui serait l'entrée créée pour un domaine deexample.com
. La configuration de ce DIT est gérée par l’entréeolcDatabase={1}hdb,cn=config
. Notez les DN des DOT sur lesquels vous souhaitez forcer le cryptage.
Nous allons utiliser un fichier LDIF pour apporter les modifications. Créez le fichier LDIF dans votre répertoire personnel. Nous l'appelleronsforcetls.ldif
:
nano ~/forcetls.ldif
À l'intérieur, ciblez le DN que vous voulez forcer sur TLS. Dans notre cas, ce seradn: olcDatabase={1}hdb,cn=config
. Nous allons définir lechangetype
sur «modifier» et ajouter l'attributolcSecurity
. Définissez la valeur de l'attribut sur «tls = 1» pour forcer TLS pour ce DIT:
forcetls.ldif
dn: olcDatabase={1}hdb,cn=config
changetype: modify
add: olcSecurity
olcSecurity: tls=1
Enregistrez et fermez le fichier lorsque vous avez terminé.
Pour appliquer le changement, tapez:
sudo ldapmodify -H ldapi:// -Y EXTERNAL -f forcetls.ldif
Rechargez le service OpenLDAP en tapant:
sudo service slapd force-reload
Maintenant, si vous recherchez le DITdc=example,dc=com
, vous serez refusé si vous n'utilisez pas l'option-Z
pour lancer une mise à niveau STARTTLS:
ldapsearch -H ldap:// -x -b "dc=example,dc=com" -LLL dn
Échec TLS requis
Confidentiality required (13)
Additional information: TLS confidentiality required
Nous pouvons démontrer que les connexions STARTTLS fonctionnent toujours correctement:
ldapsearch -H ldap:// -x -b "dc=example,dc=com" -LLL -Z dn
TLS requis succès
dn: dc=example,dc=com
dn: cn=admin,dc=example,dc=com
Conclusion
Vous devriez maintenant avoir un serveur OpenLDAP configuré avec le cryptage STARTTLS. Le chiffrement de votre connexion au serveur OpenLDAP avec TLS vous permet de vérifier l’identité du serveur avec lequel vous vous connectez. Il protège également votre trafic des tiers. Lors de la connexion sur un réseau ouvert, le cryptage de votre trafic est essentiel.