Linux

可以連接到 LDAP 伺服器,但無法綁定:OpenLdap 錯誤消息:無法聯繫 LDAP 伺服器

  • January 15, 2018

我們在 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 

引用自:https://serverfault.com/questions/560947