Linux
可以連接到 LDAP 伺服器,但無法綁定:OpenLdap 錯誤消息:無法聯繫 LDAP 伺服器
我們在 RHEL6 機器上部署了一個 PHP 應用程序,它依賴於一些 ldap 呼叫來執行。特別是,ldap_connect 和 ldap_bind 用於驗證使用者並查看他們的詳細資訊。
這種機制在我們的開發伺服器上執行得很好,它在 Ubuntu 伺服器上執行。在我們在 RHEL6 上執行的生產機器上,該過程失敗。在這兩種情況下,我們都使用相同的憑據連接到同一個 LDAP 伺服器,因此很明顯 RHEL6 伺服器上出現了問題。我們使用的是基本的 LDAP,沒有 SSL 的東西。
我可以確認新伺服器上沒有防火牆或網路問題。ping 到 LDAP 伺服器工作得很好。此外, ldap_connect 呼叫也是成功的。
為了將問題與我們的應用程序隔離開來,我使用了以下簡單的 PHP 測試腳本:
<?php // Set the ldap server $ldapurl = "[snipped]"; $ldapuser = "[snipped]"; $ldappass = "[snipped]"; // Set the debug flag $debug = true; // Set debugging if ($debug) { ldap_set_option(NULL, LDAP_OPT_DEBUG_LEVEL, 7); } // connect to ldap server echo "Trying to connect<br/>"; echo "1: " . date('l jS \of F Y h:i:s A') . "<br/>"; $ldapconn = ldap_connect($ldapurl) or die ("Couldn't connect"); echo "2: " . date('l jS \of F Y h:i:s A') . "<br/>"; // binding to ldap server echo "Trying to bind with $ldapuser - $ldappass<br/>"; echo "3: " . date('l jS \of F Y h:i:s A') . "<br/>"; $ldapbind = @ldap_bind($ldapconn, $ldapuser, $ldappass); echo "4: " . date('l jS \of F Y h:i:s A') . "<br/>"; if (!$ldapbind) { echo "Unable to bind to server $ldapurl\n"; echo "OpenLdap error message: " . ldap_error($ldapconn) . "\n"; exit; } // Rest of code goes here ?>
我在兩台伺服器上執行上述腳本。在我們的開發伺服器上,一切都很好。在我們的 RHEL6 伺服器上,連接有效,但延遲一分鐘後綁定失敗:
OpenLdap 錯誤消息:無法聯繫 LDAP 伺服器
我根本不是系統管理員,因此在網上發現的大多數關於此錯誤的討論我都沒有完全掌握。我希望這裡有人能夠幫助我解決這個問題。提前謝謝了。
與 RHEL5 不同,RHEL6需要ssl 證書(更具體地說是 TLS)才能連接到 openldap。我四處尋找解決方法,最終確定了使用 ssl 證書比找到不使用它的方法更容易和更安全的事實。
此連結可能會有所幫助: http ://www.linuxquestions.org/questions/linux-enterprise-47/rhel-6-ldap-now-requires-tls-843917/
您可以嘗試強制使用舊模式,這可能會奏效,但我發現它並不完全有效,您以後可能會看到問題。
authconfig --enableldap --enableldapauth --forcelegacy=yes --ldapserver=myldapserver.com --ldapbasedn="dc=example,dc=com" --update