使用 SSL 绑定到 LDAP 一直失败 - Windows Server 2008

使用 SSL 绑定到 LDAP 一直失败 - Windows Server 2008

每当尝试使用 SSL 绑定到 LDAP(活动目录)时,我们的脚本都会继续失败,这让我很困惑。我们可以使用不安全的方法成功连接,但我们尝试执行需要 SSL 的密码更改。我们的脚本片段如下:

配置.php

// SSL

 $LDAPDOMAIN="dc=campus,dc=local";
 $LDAPLOCALDOMAIN="campus.local";
 $LDAPHOST='ldaps://localhost';
 $LDAPPORT=636;
 $ldap = ldap_connect($LDAPHOST, $LDAPPORT) or die ('<p class="message">Error connecting');

 ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3);
 ldap_set_option($ldap, LDAP_OPT_REFERRALS, 0);

reset.php (使用 config.php)

if ($ldap)  {

  $bind = @ldap_bind($ldap,$username."@".$LDAPLOCALDOMAIN,$password);
  if (!($bind)) {
    @ldap_close($ldap);
    die ('<p class="message">Your password is incorrect, please try again 
      <a href=javascript:history.back()>click here</a><br>');
  }

无论我们做什么,脚本都会在 reset.php 中“死亡”。当我们使用常规 LDAP 时,我们至少可以进行通信。我们的 config.php 代码如下:

$ldap = ldap_connect($LDAPHOST) or die ('<p class="message">Error connecting to LDAP');

我非常感谢您的帮助,并提前向您表示感谢。

更新*

我尝试运行以下简单程序来测试我的 LDAP。SSL 仍然不起作用,但常规 LDAP 可以。这是配置问题吗?我的证书应该没问题,我创建了一个新证书并注册了我的服务器。我使用了一个 LDAP 实用程序,它可以很好地绑定和连接。但不是 PHP。

<?php
    $ldap = ldap_connect("ldaps://localhost/");
    $username="[email protected]";
    $password="password";

    if($bind = ldap_bind($ldap, $username,$password ))
    echo "logged in";
    else
        echo "fail";
        echo "<br/>done";
        ?>

我的结果是失败。

答案1

您可以尝试运行ldapsearch并给我们错误输出吗?它看起来像这样:

ldapsearch -x -d 1 -LLL -H ldaps://localhost -b 'dc=campus,dc=local' -D 'username' -W '(sAMAccountName=username)'

其中参数为:

  • -x:强制连接使用简单身份验证而不是 SASL(模拟 PHP ldap_bind() 函数)
  • -d 1:显示调试输出,增加数字以获得更详细的信息
  • -LLL:更改输出格式以删除一些调试不需要的 LDIF 信息
  • -H:主机 URI 说明符;您可以将其更改为“ldap://”以测试非 SSL 绑定
  • -b:绑定 DN
  • -D:绑定凭证用户名、CN 或其他识别字符串
  • -W:强制ldapsearch要求输入密码

如果您使用 SASL 通过 LDAPS 连接到 Active Directory 服务器,则需要设置“最大ssf“参数设置为零。我不太清楚 PHP 的 LDAP 函数是如何工作的,所以如果您能弄清楚如何工作的话,可能值得尝试设置该参数。

相关内容