Konfigurasikan OpenLDAP dengan TLS = diperlukan

16

Saat ini, OpenLDAP perlu dikonfigurasi dengan ldapmodify cn = config, seperti dijelaskan di sini . Tapi tidak ada tempat saya dapat menemukan bagaimana Anda mengkonfigurasinya untuk hanya menerima lalu lintas TLS. Saya baru saja mengkonfirmasi bahwa server kami menerima lalu lintas yang tidak dienkripsi (dengan ldapsearch dan tcpdump).

Biasanya, saya hanya akan menutup port non-SSL dengan tabel IP, tetapi menggunakan port SSL sudah usang, jadi saya tidak punya opsi itu.

Jadi, dengan perintah konfigurasi SSL, seperti ini:

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

Apakah ada param untuk memaksa TLS?

Sunting: Saya mencoba olcTLSCipherSuite, tetapi tidak berhasil. Output 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 (hampir diperbaiki): Saya dapat memperbaikinya dengan memuat:

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

Tapi kemudian perintah suka

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

Jangan bekerja lagi ... Dan mengubahnya menjadi:

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

memberi saya "ldap_bind: kredensial tidak valid (49)". Rupanya, meskipun binddn ini ditentukan sebagai rootdn, saya tidak dapat menggunakannya untuk mengubahnya cn=config. Bisakah itu diubah?

Halfgaar
sumber

Jawaban:

16

Saya sepertinya sudah mendapatkannya:

Saya melakukan ini:

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

Dan itu tampaknya memiliki efek yang diinginkan. Saya masih dapat menjalankan perintah seperti:

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

Tetapi mencoba mengikat dengan " ldapsearch -xLLL -b ..." tanpa SSL mengatakan: "Dibutuhkan kerahasiaan TLS"

Halfgaar
sumber
2
+1 tampaknya berfungsi dengan baik. Sayangnya, jika klien mencoba mengautentikasi tanpa STARTTLS, ia mengirim kata sandi dalam plaintext, dan kemudian server merespons dengan TLS confidentiality requiredpesan tersebut.
Carlos Campderrós
1
Saya mempostingnya di milis OpenLDAP sebagai kemungkinan masalah keamanan. Saya memberi contoh FTP, yang memblokir segera setelah Anda memberikan USER. Tapi, saya ditolak. Lihat ini.
Halfgaar
lucu, saya melihat utas itu sebelum saya menemukan jawaban ini :)
Carlos Campderró
Terima kasih, apa yang saya cari. Kata sandi yang melewati kawat dalam cleartext akan menjadi implementasi khusus pada perangkat lunak sisi klien. Persyaratan TLS dapat diuji dengan ikatan anonim terlebih dahulu sebelum mencoba mengikat sebagai pengguna.
Kesalahan Server
3

Ini dicapai dengan opsi TLSCipherSuite . Contoh didokumentasikan di bab keamanan LDAP dari buku OpenLDAP Zytrax . Dengannya Anda bisa memberi tahu OpenLDAP bahwa cipher suites yang akan diterima server Anda. Misalnya, Anda dapat memberi tahu bahwa Anda tidak ingin NULLsuite sandi (yaitu: sesi yang tidak dienkripsi).

Berhati-hatilah meskipun OpenLDAP dapat ditautkan dengan pustaka OpenSSL atau GnuTLS. Mereka menggunakan daftar sandi yang berbeda untuk menggambarkan dukungan enkripsi mereka. Daftar cipher OpenSSL dapat diperoleh dengan perintah seperti openssl ciphers -vdan daftar GnuTLS dengan gnutls-cli -l.

Cara paling sederhana untuk menonaktifkan koneksi tanpa enkripsi adalah:

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

Pembatasan yang lebih spesifik menggunakan sintaks GnuTLS :

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

Contoh yang lebih lengkap mungkin (menggunakan sintaks OpenSSL ):

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

Ada diskusi milis OpenLDAP yang layak dibaca tentang pertanyaan serupa .

Perlu juga dicatat bahwa alat CLI OpenLDAP, seperti ldapsearch, secara otomatis beralih ke menggunakan TLS saat menghubungkan ke server yang melarang koneksi yang tidak dienkripsi. Itu berarti Anda tidak perlu menambahkan -Zke daftar args.

Tonin
sumber
Saya mencobanya. Itu tidak berhasil. Saya mengedit pertanyaan saya untuk mencerminkannya.
Halfgaar
Saya pikir kesalahan yang Anda laporkan terkait dengan sandi yang diketahui implementasi TLS Anda. OpenLDAP dapat dikompilasi dengan pustaka OpenSSL atau gnuTLS. Contoh yang saya berikan menggunakan sintaks OpenSSL, implementasi Anda mungkin menggunakan gnuTLS. Saya sarankan Anda mencoba CipherSuite yang disederhanakan, misalnyaALL:!NULL
Tonin
"PERINGATAN: Jangan pandai dan ubah TLSCipherSuite menjadi sesuatu yang pintar seperti HIGH: MEDIUM: -SSLv2 - ini adalah direktif openssl" - baca rogermoffatt.com/2011/08/24/ubuntu-openldap-with-ssltls .
Xdg