tidak dapat mengetahui mengapa apache LDAP auth gagal

8

Tiba-tiba, kemarin, salah satu server apache saya menjadi tidak dapat terhubung ke server LDAP (AD) saya. Saya memiliki dua situs yang berjalan di server itu, yang keduanya menggunakan LDAP untuk auth terhadap server AD saya ketika pengguna masuk ke salah satu situs. Sudah berfungsi dengan baik dua hari yang lalu. Untuk alasan yang tidak diketahui, sampai kemarin, itu berhenti bekerja. Log kesalahan hanya mengatakan ini:

auth_ldap authenticate: user foo authentication failed; URI /FrontPage [LDAP: ldap_simple_bind_s() failed][Can't contact LDAP server], referer: http://mysite.com/

Saya pikir mungkin sertifikat SSL saya yang ditandatangani sendiri telah kedaluwarsa, jadi saya membuat yang baru untuk mysite.com, tetapi tidak untuk nama host server itu sendiri, dan masalahnya tetap ada. Saya mengaktifkan logging tingkat debug. Ini menunjukkan transaksi SSL penuh dengan server LDAP, dan tampaknya menyelesaikan tanpa kesalahan sampai akhir ketika saya mendapatkan pesan "Tidak dapat menghubungi server LDAP". Saya dapat menjalankan ldapsearch dari commandline di server ini, dan saya bisa masuk ke sana, yang juga menggunakan LDAP, jadi saya tahu bahwa server dapat terhubung ke dan meminta server LDAP / AD. Hanya apache yang tidak dapat terhubung.

Mencari jawaban di Google tidak menghasilkan apa-apa, jadi saya bertanya di sini. Adakah yang bisa memberikan wawasan tentang masalah ini?

Inilah bagian LDAP dari konfigurasi apache:

<Directory "/web/wiki/">
    Order allow,deny
    Allow from all
    AuthType Basic
    AuthName "Login"
    AuthBasicProvider ldap
    AuthzLDAPAuthoritative off
    #AuthBasicAuthoritative off
    AuthLDAPUrl ldaps://domain.server.ip/dc=full,dc=context,dc=server,dc=name?sAMAccountName?sub
    AuthLDAPBindDN cn=ldapbinduser,cn=Users,dc=full,dc=context,dc=server,dc=name
    AuthLDAPBindPassword password
    require valid-user
</Directory>
SethG
sumber
Cukup lucu, saya punya satu server Apache 2 yang diautentikasi terhadap LDAP yang berfungsi dengan baik selama berbulan-bulan, lalu minggu lalu mulai menunjukkan masalah yang sama persis ini! Saya tidak bisa seumur hidup mencari tahu apa itu, saya sudah mencoba segala macam hal. Akan menonton pertanyaan ini.
Kamil Kisiel

Jawaban:

9

Paket jejak dari server httpd / klien LDAP mengungkapkan pesan tentang CA yang tidak dikenal.

Peringatan TLSv1 (Level: Fatal, Deskripsi: CA tidak dikenal)

Saya menemukan dan menambahkan opsi berikut ke httpd.conf saya:

  LDAPVerifyServerCert          off

Itu memperbaiki masalah saya di bawah CentOS 6. Server CentOS 5 httpd tidak memerlukan modifikasi apa pun dan telah bekerja selama ini tanpa opsi.

dmourati
sumber
Jawaban ini akhirnya membuat saya bir. Seorang kolega mengalami masalah ini dan saya sengaja mendengarnya mengeluh tentang mengapa server Debian yang baru dicetaknya tidak dapat terhubung ke server LDAP kami. Saya telah memberinya tautan ini dan masalahnya segera diselesaikan.
dmourati
Ditambah banyak. Jawaban ini benar-benar menyelamatkan kulitku.
AnrDaemon
2

Saya memiliki masalah yang mirip dengan ini sebelumnya dengan AD pada Windows 2003: solusi yang saya temukan adalah tidak mengikat menggunakan DN lengkap tetapi alih-alih menggunakan sintaks pengguna @ domain:

AuthLDAPBindDN [email protected]
Sam Kingston
sumber
1

Apakah Anda memiliki akses ke log dari server LDAP Anda? Mereka mungkin membantu dalam memecahkan masalah ini.

Eric Dennis
sumber
Server LDAP sebenarnya adalah server Windows AD. Saya memeriksa log peristiwa, tidak menemukan sesuatu yang berguna. Bahkan tidak ada indikasi bahwa server apache bahkan mencoba terhubung.
SethG
Anda harus memverifikasi bahwa server Apache benar-benar mengirimkan permintaan LDAP ke server AD; mungkin saja ada sesuatu yang mencegah permintaan LDAP untuk membuatnya ke server AD sama sekali. Jika Anda memiliki cukup hak istimewa pada mesin Windows, Anda dapat menjalankan Wireshark untuk memverifikasi bahwa permintaan LDAP benar-benar membuat jalannya ke AD dengan benar. Jika tidak, periksa jaringan dan firewall di antara kedua server. Apakah Anda menjalankan iptables di server Apache?
Eric Dennis
1

Saya telah melihat ini ketika pembaruan paket menyebabkan perubahan pada ldap.conf klien (biasanya /etc/ldap.conf atau /etc/openldap/ldap.conf) dan mengatur ulang opsi TLS_REQCERT ke pengaturan yang lebih ketat. Itu dapat menegosiasikan SSL dengan benar, tetapi masih akan gagal pada akhirnya karena tidak dapat memvalidasi rantai sertifikat dari root tepercaya.

shollyman
sumber
1

Anda mungkin ingin memeriksa jam server. Jika perbedaan waktu lebih dari beberapa menit, tiket otentikasi akan tidak valid.

Meskipun ini bukan pesan kesalahan, bagian 'server lain tiba-tiba mendapat masalah yang sama' mungkin mengindikasikan masalah seperti itu.

Ger Apeldoorn
sumber
1

Anda perlu menerapkan sertifikat LDAP CA untuk bekerja dengan LDAPS

merobek-
sumber
1

Saya memiliki masalah serupa, yang telah saya identifikasi dengan menjalankan perintah ini:

openssl s_client -connect $ldap_host:636 -state -nbio 2>&1. Saya pikir mod_ldap menggunakan openssl di bawahnya, jadi ini harus cukup konsisten untuk debugging.

Saya membandingkannya dengan server terenkripsi SSL lain yang saya tahu berfungsi. Koneksi SSL yang terverifikasi dengan benar akan menunjukkan rantai menuju ke CA root dan mengembalikan 0. Kegagalan verifikasi SSL akan memberikan nomor dan alasan. Anda dapat menggunakan output untuk menentukan apa yang salah.

Dalam kasus saya, sertifikat server LDAP ditandatangani oleh Verisign, yang menggunakan sertifikat CA Menengah . OpenSSL tidak dapat memverifikasi sertifikat dan koneksi ditolak ("koneksi ditolak oleh server" tidak membantu).

jldugger
sumber
1

Saya punya masalah serupa. Saya dapat memperoleh sertifikat dengan openssl, saya dapat meminta Active Directory melalui SSL dengan ldapsearch pada port yang sama. Akhirnya saya berubah ke port Microsoft Global Catalog 3268 atau 3269 dan keduanya bekerja. Server Microsoft Windows 2003 telah ditambal, tetapi itu terjadi beberapa hari sebelum masalah mulai terjadi.

Jumlah teman
sumber
0

Saya menerapkan LDAPS di semua server kami dan juga mengalami masalah ini. Apakah akan hilang jika Anda kembali ke plaintext LDAP (Tidak ideal, tetapi berguna untuk mengetahui sumber masalahnya). Jika demikian, saya belum menemukan solusi, tetapi mungkin bersama-sama kita dapat mengisolasi bug di authnz_ldap.

Kyle Smith
sumber
0

Saya berasumsi bahwa percobaan baris perintah Anda menggunakan "pengguna bind" yang sama seperti pada konfigurasi apache Anda. Jika tidak, Anda harus memeriksa apakah Anda memiliki kata sandi saat ini yang benar.

Di masa lalu, saya pernah menggunakan port katalog global alih-alih port LDAP standar untuk domain AD. Saya tidak ingat alasannya. Untuk ldaps seperti pada url Anda di atas, ini akan menjadi port 3269.

Zac Thompson
sumber
0

Cara kerjanya adalah situs web Anda harus terhubung ke AD menggunakan kredensial pengguna bind Anda terlebih dahulu, dan kemudian, setelah koneksi ini dibuat, ia menggunakan akses ini untuk memvalidasi kredensial pengguna yang mencoba mengakses situs web Anda.

Menurut pesan kesalahan Anda, sepertinya proses tidak dapat terhubung ke AD sebagai pengguna mengikat Anda (AuthLDAPBindDN).

Pastikan akun pengguna bind tidak dinonaktifkan di Direktori Aktif, dan kata sandi yang Anda tentukan (AuthLDAPBindPassword) benar . Juga, pastikan bahwa pengguna mengikat Anda memiliki izin yang diperlukan untuk mencari pengguna lain (harus menjadi anggota Pengguna Domain dalam kasus kami)

Brent
sumber
0

Saya baru saja mengalami masalah ini ("tidak dapat menghubungi server ldap") di RHEL6, dan itu adalah hasil dari perubahan pada openldap. yum telah memperbarui file config /etc/openldap/ldap.conf tetapi alih-alih menimpanya (seandainya itu dikustomisasi; dalam kasus saya itu tidak) ia membuat file ldap.conf.rpmnew.

Menyalin versi .rpmnew lebih dari ldap.conf memperbaiki masalah.

(Saya tidak bisa setuju bahwa mematikan verifikasi sertifikat adalah jawaban untuk ini. Ini menghindari masalah yang berpotensi berbahaya.)

banyak orang
sumber
0

Saya berhasil memperbaiki masalah ini dengan menginstal berkelydbdan openldappaket yang ditemukan di sini .

Perbedaannya adalah bahwa RedHat telah mulai menghubungkan berbagai hal, nssbukan openssluntuk dukungan SSL. Dalam hal ini, itu menghancurkan semua hal. Menginstal paket-paket ini (yang terkait dengan openssl) memperbaiki masalah. Dapatkan paket dan jalankan:

yum install berkeleydb-ltb* openldap-ltb*

Kemudian restart apache, dan Anda harus menjalankan bisnis.

qartman
sumber
0

Saya memiliki masalah yang sama setelah memutakhirkan dari rhel6.6 ke rhel7.5. Ketika saya kehabisan ide saya menyimpulkan mod_ssl pada apache 2.2.32 mungkin tidak 100% kompatibel di rhel7.4. Saya memutakhirkan dari Apache 2.2.32 ke Apache2.4, mengaktifkan SSL, dan sldap berfungsi.

Maya Elmoursi
sumber