Skonfiguruj OpenLDAP z TLS = wymagany

16

Obecnie OpenLDAP musi być skonfigurowany przy pomocy ldapmodify cn = config, jak opisano tutaj . Ale nigdzie nie mogę znaleźć sposobu skonfigurowania go tak, aby akceptował tylko ruch TLS. Właśnie potwierdziłem, że nasz serwer akceptuje nieszyfrowany ruch (z ldapsearch i tcpdump).

Zwykle po prostu zamykałem port inny niż SSL za pomocą tabel IP, ale użycie portu SSL jest najwyraźniej przestarzałe, więc nie mam tej opcji.

Tak więc w przypadku poleceń konfiguracyjnych SSL:

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

Czy jest jakiś parametr wymuszania TLS?

Edycja: Próbowałem olcTLSCipherSuite, ale to nie działa. Wyjście debugowania:

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.

Edycja2 (prawie naprawiona): Byłem w stanie to naprawić, ładując:

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

Ale potem polecenia jak

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

Już nie pracuj ... I zmieniając go na:

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

daje mi „ldap_bind: nieprawidłowe dane logowania (49)”. Najwyraźniej, mimo że to binddn jest określone jako rootdn, nie mogę go użyć do modyfikacji cn=config. Czy można to zmienić?

Halfgaar
źródło

Odpowiedzi:

16

Wydawało mi się, że to dostałem:

Ja to zrobiłem:

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

I to wydaje się mieć pożądany efekt. Nadal mogę uruchamiać polecenia takie jak:

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

Ale próba połączenia z „ ldapsearch -xLLL -b ...” bez protokołu SSL mówi: „Wymagana poufność TLS”

Halfgaar
źródło
2
+1 wydaje się, że działa świetnie. Niestety, jeśli klient próbuje się uwierzytelnić bez STARTTLS, wysyła hasło w postaci zwykłego tekstu, a następnie serwer odpowiada TLS confidentiality requiredkomunikatem.
Carlos Campderrós
1
Opublikowałem to na liście mailingowej OpenLDAP jako możliwy problem bezpieczeństwa. Podałem przykład FTP, który blokuje, gdy tylko podasz USER. Ale zostałem unieważniony. Zobacz.
Halfgaar
śmieszne, spojrzałem na ten wątek, zanim znalazłem tę odpowiedź :)
Carlos Campderrós
Dzięki, właśnie tego szukałem. Hasło przechodzące przez drut w postaci czystego tekstu będzie specyficzne dla implementacji oprogramowania po stronie klienta. Wymagania TLS można najpierw przetestować za pomocą anonimowego powiązania, a następnie spróbować powiązać jako użytkownik.
Błąd serwera
3

Osiąga się to dzięki opcji TLSCipherSuite . Przykład udokumentowano w rozdziale dotyczącym bezpieczeństwa LDAP w książce OpenLDAP Zytrax . Dzięki niemu możesz powiedzieć OpenLDAP, jakie zestawy szyfrów zaakceptuje twój serwer. Na przykład możesz powiedzieć, że nie chcesz NULLpakietu szyfrów (tj. Sesji nieszyfrowanej).

Uważaj jednak, aby OpenLDAP można było połączyć z bibliotekami OpenSSL lub GnuTLS. Ci używają różnych list szyfrów do opisania obsługi szyfrowania. Listę szyfrów OpenSSL można uzyskać za pomocą polecenia podobnego, openssl ciphers -va listę GnuTLS za pomocą gnutls-cli -l.

Najprostszym sposobem, aby wyłączyć podłączania bez szyfrowania będzie wówczas:

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

Bardziej szczegółowe ograniczenie przy użyciu składni GnuTLS :

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

Bardziej kompletnym przykładem może być (przy użyciu składni OpenSSL ):

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

Jest dyskusja na liście mailowej OpenLDAP, którą warto przeczytać o podobnym pytaniu .

Warto również zauważyć, że narzędzia cli OpenLDAP, takie jak ldapsearch, automatycznie przełączają się na używanie TLS podczas łączenia się z serwerem zabraniającym niezaszyfrowanych połączeń. Oznacza to, że nie trzeba dodawać -Zdo listy argumentów.

Tonin
źródło
Próbowałem tego. Nie działało. Zredagowałem swoje pytanie, aby je odzwierciedlić.
Halfgaar,
Myślę, że zgłaszany błąd jest związany z szyframi, o których wie implementacja TLS. OpenLDAP można skompilować z bibliotekami OpenSSL lub gnuTLS. W podanym przeze mnie przykładzie użyto składni OpenSSL. Twoja implementacja prawdopodobnie używa gnuTLS. Sugeruję wypróbowanie uproszczonego CipherSuite, na przykładALL:!NULL
Tonin
„OSTRZEŻENIE: nie bądź sprytny i zmień TLSCipherSuite na coś sprytnego jak WYSOKI: ŚREDNI: -SSLv2 - jest to dyrektywa openssl” - przeczytaj rogermoffatt.com/2011/08/24/ubuntu-openldap-with-ssltls .
Xdg