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ć?

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”


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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.