我们有一个在RHEL6机器上部署的PHP应用程序,依靠一些ldap调用来运行。 特别是,ldap_connect和ldap_bind用于validation用户,并查找其详细信息。
这个机制在Ubuntu服务器上运行的开发服务器上工作得很好。 在RHEL6上运行的生产机器上,该过程失败。 在这两种情况下,我们使用相同的凭据连接到相同的LDAP服务器,因此RHEL6服务器上显然是错误的。 我们使用基本的LDAP,没有SSL的东西。
我可以确认新服务器上没有防火墙或networking问题。 Ping到LDAP服务器工作得很好。 另外,ldap_connect调用也是成功的。
为了从我们的应用程序中分离出问题,我使用了下面简单的PHPtesting脚本:
<?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 FY h:i:s A') . "<br/>"; $ldapconn = ldap_connect($ldapurl) or die ("Couldn't connect"); echo "2: " . date('l jS \of FY h:i:s A') . "<br/>"; // binding to ldap server echo "Trying to bind with $ldapuser - $ldappass<br/>"; echo "3: " . date('l jS \of FY h:i:s A') . "<br/>"; $ldapbind = @ldap_bind($ldapconn, $ldapuser, $ldappass); echo "4: " . date('l jS \of FY 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服务器
我不是一个系统pipe理员,因此大多数讨论发现有关这个错误在线我不完全掌握。 我希望这里有人能够帮助我。 提前谢谢了。
与RHEL5不同的是,RHEL6 需要 SSL证书(更具体的说是TLS)来连接到openldap。 我绕了一圈又一圈试图find一个解决方法,最后解决了使用SSL证书比find一个不使用它的方式更容易和更安全的事实。
这个链接可能有帮助: 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