Configurer OpenLDAP avec TLS = requis

16

De nos jours, OpenLDAP doit être configuré avec ldapmodify cn = config, comme décrit ici . Mais je ne trouve nulle part comment le configurer pour accepter uniquement le trafic TLS. Je viens de confirmer que notre serveur accepte le trafic non crypté (avec ldapsearch et tcpdump).

Normalement, je fermerais simplement le port non SSL avec des tables IP, mais l'utilisation du port SSL est obsolète, donc je n'ai pas cette option.

Donc, avec les commandes de configuration SSL, comme ceci:

dn: cn=config
changetype:modify
replace: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/ssl/bla.key
-
replace: olcTLSCertificateFile
olcTLSCertificateFile: /etc/ssl/bla.crt
-
replace: olcTLSCACertificateFile
olcTLSCACertificateFile: /etc/ssl/ca.pem

Existe-t-il un paramètre pour forcer TLS?

Edit: J'ai essayé l'olcTLSCipherSuite, mais cela ne fonctionne pas. Sortie de débogage:

TLS: could not set cipher list TLSv1+RSA:!NULL.
main: TLS init def ctx failed: -1
slapd destroy: freeing system resources.
slapd stopped.
connections_destroy: nothing to destroy.

Edit2 (presque fixe): j'ai pu le réparer en chargeant:

# cat force-ssl.tx 
dn: cn=config
changetype:  modify
add: olcSecurity
olcSecurity: tls=1

Mais des commandes comme

ldapmodify -v -Y EXTERNAL -H ldapi:/// -f /etc/ssl/tls-required.ldif

Ne travaillez plus ... Et changez-le en:

ldapmodify -v -x -D "cn=admin,dc=domain,dc=com" -H ldap://ldap.bla.tld/ -ZZ -W -f force-ssl.txt

me donne "ldap_bind: Identifiants invalides (49)". Apparemment, même si ce binddn est spécifié en tant que rootdn, je ne peux pas l'utiliser pour le modifier cn=config. Cela peut-il être changé?

Halfgaar
la source

Réponses:

16

Il me semblait l'avoir compris:

J'ai fait ça:

dn: olcDatabase={1}hdb,cn=config
changetype:  modify
add: olcSecurity
olcSecurity: tls=1

Et cela semble avoir l'effet souhaité. Je peux toujours exécuter des commandes comme:

ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b cn=config

Mais essayer de se lier avec " ldapsearch -xLLL -b ..." sans SSL dit: "Confidentialité TLS requise"

Halfgaar
la source
2
+1, cela semble très bien fonctionner. Malheureusement, si le client tente de s'authentifier sans STARTTLS, il envoie le mot de passe en texte clair, puis le serveur répond avec le TLS confidentiality requiredmessage.
Carlos Campderrós
1
J'ai posté cela sur la liste de diffusion OpenLDAP comme un problème de sécurité possible. J'ai donné l'exemple de FTP, qui bloque dès que vous donnez USER. Mais, j'ai été annulé. Regarde ça.
Halfgaar
drôle, j'ai regardé ce fil avant de trouver cette réponse :)
Carlos Campderrós
Merci, juste ce que je cherchais. Le mot de passe passant par le câble en texte clair sera spécifique à l'implémentation sur le logiciel côté client. L'exigence TLS peut être testée avec une liaison anonyme avant d'essayer de se lier en tant qu'utilisateur.
Erreur serveur
3

Ceci est réalisé avec l' option TLSCipherSuite . Un exemple est documenté au chapitre sur la sécurité LDAP du livre OpenLDAP Zytrax . Avec lui, vous pouvez indiquer à OpenLDAP les suites de chiffrement que votre serveur acceptera. Par exemple, vous pouvez dire que vous ne voulez pas de NULLsuite de chiffrement (c'est-à-dire: session non chiffrée).

Attention cependant, OpenLDAP peut être lié aux bibliothèques OpenSSL ou GnuTLS. Ceux-ci utilisent différentes listes de chiffrement pour décrire leur prise en charge du chiffrement. La liste de chiffrement OpenSSL peut être obtenue avec une commande comme openssl ciphers -vet la liste GnuTLS avec gnutls-cli -l.

Le moyen le plus simple de désactiver la connexion sans chiffrement serait alors:

dn: cn=config
changetype: modify
replace: olcTLSCipherSuite
olcTLSCipherSuite: ALL:!NULL

Une restriction plus spécifique utilisant la syntaxe GnuTLS :

dn: cn=config
changetype: modify
replace: olcTLSCipherSuite
olcTLSCipherSuite: TLS_RSA_CAMELLIA_128_CBC_SHA1:TLS_RSA_CAMELLIA_256_CBC_SHA1:!NULL

Un exemple plus complet pourrait être (en utilisant la syntaxe OpenSSL ):

dn: cn=config
changetype: modify
replace: olcTLSCipherSuite
olcTLSCipherSuite: HIGH:+SSLv3:+TLSv1:MEDIUM:+SSLv2:@STRENGTH:+SHA:+MD5:!NULL

Il y a une discussion sur la liste de diffusion OpenLDAP à lire sur une question similaire .

Il convient également de noter que les outils cli OpenLDAP, comme ldapsearch, passent automatiquement à l'utilisation de TLS lors de la connexion à un serveur interdisant les connexions non chiffrées. Cela signifie que vous n'avez pas besoin d'ajouter -Zà la liste des arguments.

Tonin
la source
Je l'ai essayé. Ça n'a pas marché. J'ai modifié ma question pour la refléter.
Halfgaar
Je pense que l'erreur que vous signalez est liée aux chiffres que votre implémentation TLS connaît. OpenLDAP peut être compilé avec les bibliothèques OpenSSL ou gnuTLS. L'exemple que j'ai donné utilise la syntaxe OpenSSL, votre implémentation utilise probablement gnuTLS. Je vous suggère d'essayer une CipherSuite simplifiée, par exempleALL:!NULL
Tonin
"AVERTISSEMENT: ne soyez pas intelligent et changez TLSCipherSuite en quelque chose d'intelligent comme HIGH: MEDIUM: -SSLv2 - il s'agit d'une directive openssl" - lire rogermoffatt.com/2011/08/24/ubuntu-openldap-with-ssltls .
Xdg