LDAP 和 PHP 连接失败

2022-08-31 01:15:10

我正在尝试通过PHP连接到安全的LDAP服务器(使用LDAP),但我遇到了问题。我收到以下错误

警告:ldap_bind() [function.ldap-bind]:无法绑定到服务器:无法联系第 16 行的 /var/www/test.php 中的 LDAP 服务器

当我尝试在没有 LDAP 的情况下进行连接时,我可以使用 LDAP,因为我将处理敏感信息。

我正在使用以下代码

<?php
// basic sequence with LDAP is connect, bind, search, interpret search
// result, close connection

echo "<h3>LDAP query test</h3>";
echo "Connecting ...";
$ds=ldap_connect("ldaps://server");  // must be a valid LDAP server!




print $ds;

if ($ds) { 
    echo "<br><br>Binding ..."; 
    $r=ldap_bind($ds);     // this is an "anonymous" bind, typically
                           // read-only access
    echo "Bind result is " . $r . "<br />";

    echo "Searching for (sn=S*) ...";
    // Search surname entry
    $sr=ldap_search($ds, "ou=people,o=server.ca,o=server", "uid=username*");  
    echo "Search result is " . $sr . "<br />";

    echo "Number of entires returned is " . ldap_count_entries($ds, $sr) . "<br />";

    echo "Getting entries ...<p>";
    $info = ldap_get_entries($ds, $sr);
    echo "Data for " . $info["count"] . " items returned:<p>";

print_r($info);
//    for ($i=0; $i<$info["count"]; $i++) {
//        echo "dn is: " . $info[$i]["dn"] . "<br />";
//        echo "first cn entry is: " . $info[$i]["cn"][0] . "<br />";
//        echo "first email entry is: " . $info[$i]["mail"][0] . "<br /><hr />";
//    }

    echo "Closing connection";
    ldap_close($ds);

} else {
    echo "<h4>Unable to connect to LDAP server</h4>";
}
?>

答案 1

该问题与实际的绑定过程(凭据无效)无关,因为如果 LDAP 服务器无法验证您的凭据,则警告会有所不同。但正如保罗·迪克森(Paul Dixon)所指出的那样,应该要求使用 - 即使我不认为这是你问题的原因。ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3)

  • 您要连接到哪种 LDAP 服务器类型?OpenLDAP,Active Directory还是其他东西?
  • 运行PHP程序的计算机的操作系统是什么?
  • 您是否在 LDAP 服务器上使用自签名 SSL 证书,并且运行 PHP 程序的计算机是否信任给定证书的证书颁发机构?
  • LDAP 服务器在哪个端口上运行?636 将是 LDAPS 的“官方”端口。也许您可以将端口显式添加到服务器地址:。ldaps://<<server>>:636

ext/ldapSSL/TLS 安全连接存在一些问题。您可以尝试添加

TLS_REQCERT never

到 (或在基于 *nix 的系统上)或对于 Windows 计算机,创建包含上述内容的 (路径必须完全匹配,因为它已硬编码到扩展中)。ldap.conf/etc/ldap.conf/etc/ldap/ldap.confldap.confC:\OpenLDAP\sysconf\ldap.conf


答案 2

在某些具有最新 PHP 版本的服务器上使用 SSL/TLS 似乎是一个问题。不知道为什么。您可以参考我的帖子:使用PHP安全绑定到Active Directory的问题

其中一个更可能的原因是Stefan的原因。要确保情况确实如此,您可以使用:

ldap_set_option(NULL, LDAP_OPT_DEBUG_LEVEL, 7);

在你ldap_connect之前。这将打印一条更合理的错误消息来记录(通常 ssl 证书无效,参考 Stefan Gehrig)


推荐