【问题标题】:PHP ldap - Strong(er) authentication requiredPHP ldap - 需要强(er)身份验证
【发布时间】:2011-05-13 12:09:36
【问题描述】:

我有一个执行 LDAP 连接、绑定和搜索的 PHP 脚本。它与大多数 Active Directory 服务器配合得很好,但是我们的一个客户遇到了问题。脚本返回

Strong(er) authentication required.

尝试 ldap_bind 时出错。

我所做的所有搜索都指向两个可能的问题:

  1. 我必须将 LDAP_OPT_PROTOCOL_VERSION 设置为 3 - 这是我之前做过和做过的,所以这不是我的问题。
  2. AD 服务器配置为使用 SSL 身份验证 - 但我们的客户端坚持认为它是默认的 Windows 2008 R2 服务器安装,并且肯定不会默认使用 SSL。

还有哪些其他原因会导致此错误发生?

更新

Active Directory 服务器上需要 SSL ...

【问题讨论】:

  • 您是否在 ssl 端口上使用 ldaps:// 进行连接?如果您省略 ldaps:// - 那么 PHP 将尝试进行未加密的绑定
  • 打赌 Jon Skarpeteig 是对的,在我明确使用 ldaps 之前,我遇到了完全相同的问题。检查 LDAP 部分下的 phpinfo() 以确保它支持 SASL
  • 我知道 ldaps:// 并且配置起来非常困难。从 AD 服务器导出证书,将它们复制到 Linux 机器上,将它们转换为 pem,说服 openssl 使用它们......所以,我没有使用 ldaps://,据我所知 AD 服务器没有不需要安全身份验证,至少我们的客户告诉我们这是一个基本安装......不幸的是,我无法自己检查它,并且在每台 AD 服务器上我都尝试了它运行良好的脚本,除了上面提到的那个。
  • 奇怪到我执行ldap_add()时没有出现问题。

标签: php ldap


【解决方案1】:

如果 Active Directory 服务器需要,您必须使用 ldaps://。如果是无效证书颁发机构的问题,您可以通过发出来忽略 windows 中的有效性

putenv('LDAPTLS_REQCERT=never');

在您的 php 代码中。在 *nix 中,您需要编辑您的 /etc/ldap.conf 以包含

TLS_REQCERT never

其他常见问题可以参考我PHP cannot connect to LDAP Oracle Directory Server Enterprise Edition的帖子

有关工作示例代码,您可以查看:Problems with secure bind to Active Directory using PHP

【讨论】:

  • 我的 LDAP 服务器没有域。我可以设置ldaps://吗?
  • 我想知道是否可以关闭安全警告并继续使用ldap://修改ldap服务器内的数据。
【解决方案2】:

我遇到了同样的问题,我的 bind_rdn 似乎有错字,所以请确保凭据正确。

【讨论】:

    【解决方案3】:

    如果您尝试使用以下方式更新 LDAP 实体,也会出现消息“需要强(er)身份验证”:

    • ldap_modify
    • ldap_mod_replace
    • ldap_modify_batch

    不使用可选参数调用绑定函数:

     string $bind_rdn = NULL [, string $bind_password = NULL 
    

    此代码不起作用:

    $ldap = ldap_connect($ldap_url);
    ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3);
    ldap_set_option($ldap, LDAP_OPT_REFERRALS, 0);
    
    $bind = ldap_bind($ldap);
    
    $userdata=array();
    $userdata['userattribute'][0]='test';
    
    ldap_modify ($ldap, "cn=myuser,dc=example,dc=com", $userdata);
    

    此代码有效,请注意对绑定函数的不同调用:

    $ldap = ldap_connect($ldap_url);
    ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3);
    ldap_set_option($ldap, LDAP_OPT_REFERRALS, 0);
    
    $bind = ldap_bind($ldap,'cn=admin,dc=example,dc=com','secretpassword');
    
    $userdata=array();
    $userdata['userattribute'][0]='test';
    
    ldap_modify ($ldap, "cn=myuser,dc=example,dc=com", $userdata);
    

    【讨论】:

      【解决方案4】:

      This answer 似乎已满,虽然很短。它涵盖了有关如何处理错误的两个选项。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多