0

我有一个外部 Web 服务器尝试通过 LDAP 对内部服务器上的 Active Directory 进行身份验证。我能够在本地进行连接和身份验证,尽管使用相同的代码(切换主机和端口)无法在外部进行身份验证。我们还有其他能够连接和验证的服务,例如 Attask (http://www.attask.com/)。

外部服务器当前是 Media Temple 上的 Linux (gs),运行 PHP 5.3.15 并启用了 LDAP 支持。

内部服务器当前是带有 LDAP 和 Active Directory 的 Windows Server 2008 机器。

下面的代码是我正在使用的当前 PHP,它能够在本地连接,但在外部服务器上出现问题。它基本上使用 PHP LDAP 连接字符串并尝试绑定。如果失败,它会尝试匿名绑定。两者都不能在外部工作并返回错误:无法联系 LDAP 服务器。

<?php
$username = 'username';
$password = 'password';

$ldapconfig['host'] = '00.000.000.000';
$ldapconfig['port'] = '636';
$ldapconfig['basedn'] = 'dc=client,dc=eqc,dc=local';

$ds=ldap_connect($ldapconfig['host'], $ldapconfig['port']);

ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($ds, LDAP_OPT_REFERRALS, 0);
ldap_set_option($ds, LDAP_OPT_NETWORK_TIMEOUT, 10);

$dn="".$username."";

if ($bind=ldap_bind($ds, $dn, $password)) {
  echo("Login correct");
} else {

  echo("Unable to bind to server.</br>");

  echo("msg:'".ldap_error($ds)."'</br>".ldap_errno($ds)."");

  if ($bind=ldap_bind($ds)) {

    $filter = "(cn=*)";

    if (!($search=@ldap_search($ds, $ldapconfig['basedn'], $filter))) {
      echo("Unable to search ldap server<br>");
      echo("msg:'".ldap_error($ds)."'</br>");
    } else {
      $number_returned = ldap_count_entries($ds,$search);
      $info = ldap_get_entries($ds, $search);
      echo "The number of entries returned is ". $number_returned."<p>";
      for ($i=0; $i<$info["count"]; $i++) {
        var_dump($info[$i]);
      }
    }
  } else {
    echo("Unable to bind anonymously<br>");
    echo("msg:".ldap_error($ds)."<br>");
  }
}
?>

几点注意事项:

  • 外部 LDAP 服务器正在使用 LDAPS,因此建议的主机是端口 636 上的 ldaps://00.000.000.000

  • 我已经尝试与“用户名”和“用户名@00.000.000.000”绑定

  • 有防火墙,但是,外部服务器可以成功地 ping 内部 LDAP 服务器,因此在该级别上发生了连接。

任何帮助将不胜感激。如果有服务器设置或那种性质的东西,很想知道。此外,我已经检查了 ADFS,但找不到一个简单的脚本来设置来测试,如果它不起作用,则无需花费大量时间。

4

2 回答 2

1

从 Linux 机器使用 LDAPS 连接到 AD 时,我总是不得不添加该行

TLS_REQCERT never

在 /etc/ldap.conf 或等效文件中(可能需要重新启动 apache - 不确定)。您也可以为主机尝试格式“ldaps://server.domain.tld:636”,但我认为这不是问题所在。

我在http://en.gentoo-wiki.com/wiki/Active_Directory_Authentication_using_LDAP找到了一些不错的文档,尽管它目前似乎已关闭。Google 的缓存版本:http ://webcache.googleusercontent.com/search?q=cache:http://en.gentoo-wiki.com/wiki/Active_Directory_Authentication_using_LDAP

于 2013-01-09T09:37:28.663 回答
0

您是否检查过它是否是 SSL 证书错误?您使用的是自签名证书还是官方证书?

“如果您使用 SSL(例如 ldaps)并且 ldap_bind 抛出‘无法绑定到服务器:’错误,请检查 ldap_connect 中使用的主机名是否与 LDAP 服务器上 SSL 证书中的‘CN’相匹配” 来源

于 2013-01-08T22:25:33.583 回答