ldap_bind() - 无法联系 LDAP 服务器

ldap_bind() - Can't contact LDAP server

我有一个 VM 运行 CentOS 7 安装了 LAMP 堆栈。在 VM 上,我正在尝试创建到我的域控制器的 LDAPS 连接,它是一个 Windows 2008 R2 VM。我使用的 SSL 证书是自签名的,并且 CA 已添加到 CentOS 7 CA 信任中。

我可以通过 ldapsearch 连接到域控制器。将 ldapsearch 调试级别设置为 1,我可以验证我的证书是否有效。

ex.) ldapsearch -H "ldaps://server.ad.com" -D "domain\user-name" -W -d 1

每当我尝试通过 php 使用 LDAPS 时,我都会收到 ldap_connect() 成功消息,但 ldap_bind() 总是出现错误 -1 无法联系 LDAP 服务器。下面是一个代码示例:

<?php

define(LDAP_OPT_DIAGNOSTIC_MESSAGE,0x0032);
echo "defined LDAP_OPT_DIAGNOSTIC_MESSAGE <br />";

$handle = ldap_connect("ldaps://server.ad.com:636");
echo "called ldap_connect <br />";
$errorCode = ldap_errno( $handle );
echo "error code: $errorCode <br />";
$errorMsg = ldap_error( $handle );
echo "error message: $errorMsg <br />";

if (!$handle)
{
    echo "ldap_connect method returned null <br />";
}
else
{
    echo "ldap_connect returned a handle! <br />";
}

$bind = ldap_bind($handle, 'domain\user', 'password');
echo "called ldap_bind <br />";
$errorCode2 = ldap_errno( $handle );
echo "error code: $errorCode2 <br />";
$errorMsg2 = ldap_error( $handle );
echo "error message: $errorMsg2 <br />";

if (!$bind)
{
    echo "ldap_bind method returned null <br />";
}
else
{
    echo "ldap_bind returned a bind! <br />";
}

if(ldap_get_option($handle, LDAP_OPT_DIAGNOSTIC_MESSAGE, $extended_error))
{
    echo "Error binding to LDAP: $extended_error";
}
else
{
    echo "Error bind to LDAP: No additional information is available.";
}   
?>

输出:

defined LDAP_OPT_DIAGNOSTIC_MESSAGE
called ldap_connect
error code: 0
error message: Success
ldap_connect returned a handle!
called ldap_bind
error code: -1
error message: Can't contact LDAP server
ldap_bind method returned null
Error bind to LDAP: No additional information is available.

我觉得 "Can't contact LDAP server" 是一条过于笼统的错误消息,所以我尝试添加 LDAP_OPT_DIAGNOSTIC_MESSAGE(http://php.net/manual/en/function.ldap-bind.php - 第一条评论)。但这似乎不起作用。

有什么想法吗?

经过进一步调查,我发现通过命令行 运行 这个 PHP 文件可以成功绑定。它只是在从浏览器查看时失败。

根据这些信息,我能够在 ServerFault 上提出另一个问题,并发现由于 SELinux 配置,此绑定实际上失败了。

请在此处查看完整答案:https://serverfault.com/questions/677013/php-executes-with-different-results-in-command-line-than-when-browsed-to-in-apac