Configura OpenLDAP con TLS = richiesto


16

Oggi OpenLDAP deve essere configurato con ldapmodify cn = config, come descritto qui . Ma da nessuna parte posso trovare come configurarlo per accettare solo il traffico TLS. Ho appena confermato che il nostro server accetta traffico non crittografato (con ldapsearch e tcpdump).

Normalmente, chiuderei semplicemente la porta non SSL con le tabelle IP, ma l'utilizzo della porta SSL è deprecato, a quanto pare, quindi non ho questa opzione.

Quindi, con i comandi di configurazione SSL, in questo modo:

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

Esiste un parametro per forzare TLS?

Modifica: ho provato olcTLSCipherSuite, ma non funziona. Uscita di debug:

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 (quasi risolto): sono stato in grado di risolverlo caricando:

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

Ma poi comanda come

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

Non funziona più ... E cambiandolo in:

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

mi dà "ldap_bind: credenziali non valide (49)". Apparentemente, anche se questo binddn è specificato come rootdn, non posso usarlo per modificarlo cn=config. Può essere cambiato?

Risposte:


16

Mi sembrava di averlo ottenuto:

L'ho fatto:

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

E quello sembra avere l'effetto desiderato. Posso ancora eseguire comandi come:

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

Ma cercando di legare " ldapsearch -xLLL -b ..." senza SSL dice: "È richiesta la riservatezza TLS"


2
+1 sembra funzionare alla grande. Sfortunatamente se il client tenta di autenticarsi senza STARTTLS, invia la password in testo normale e quindi il server risponde con il TLS confidentiality requiredmessaggio.
Carlos Campderrós,

1
L'ho pubblicato sulla mailing list di OpenLDAP come possibile problema di sicurezza. Ho dato l'esempio di FTP, che si blocca non appena si dà USER. Ma sono stato annullato. Guarda questo.
Halfgaar

divertente, ho guardato quel thread prima di trovare questa risposta :)
Carlos Campderrós

Grazie, proprio quello che stavo cercando. La password che passa attraverso il filo in chiaro sarà specifica per l'implementazione sul software lato client. Il requisito TLS può essere testato con associazione anonima prima di provare a associare l'utente.
Errore server

3

Ciò si ottiene con l' opzione TLSCipherSuite . Un esempio è documentato nel capitolo sulla sicurezza LDAP del libro OpenLDAP Zytrax . Con esso puoi dire a OpenLDAP le suite di crittografia che il tuo server accetterà. Ad esempio, puoi dire che non vuoi una NULLsuite di cifratura (es .: sessione non crittografata).

Fai attenzione, tuttavia, che OpenLDAP possa essere collegato a librerie OpenSSL o GnuTLS. Quelli usano elenchi di crittografia diversi per descrivere il loro supporto di crittografia. L'elenco di crittografia OpenSSL può essere ottenuto con un comando like openssl ciphers -ve l'elenco GnuTLS con gnutls-cli -l.

Il modo più semplice per disabilitare la connessione senza crittografia sarebbe quindi:

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

Una restrizione più specifica usando la sintassi di GnuTLS :

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

Un esempio più completo potrebbe essere (usando la sintassi OpenSSL ):

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

C'è una discussione sulla mailing list di OpenLDAP che vale la pena leggere su una domanda simile .

Vale anche la pena notare che gli strumenti di cli OpenLDAP, come ldapsearch, passano automaticamente all'utilizzo di TLS quando si connettono a un server che vieta le connessioni non crittografate. Ciò significa che non è necessario aggiungere -Zall'elenco args.


L'ho provato. Non ha funzionato Ho modificato la mia domanda per rifletterla.
Halfgaar,

Penso che l'errore segnalato sia correlato alle cifre che l'implementazione TLS conosce. OpenLDAP può essere compilato con le librerie OpenSSL o gnuTLS. Nell'esempio che ho fornito con la sintassi OpenSSL usata, l'implementazione sta probabilmente usando gnuTLS. Ti suggerirei di provare una CipherSuite semplificata, ad esempioALL:!NULL
Tonin

"ATTENZIONE: non essere intelligente e cambia TLSCipherSuite in qualcosa di intelligente come ALTO: MEDIO: -SSLv2 - questa è una direttiva openssl" - leggi rogermoffatt.com/2011/08/24/ubuntu-openldap-with-ssltls .
Xdg,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.