php7 ldap通过TLS连接并绑定

时间:2018-07-31 14:22:38

标签: php ldap connection

我有这个简单的php文件:

    $ldap="localhost";
    $port=636;
    $usr="CN=admin";
    $pwd="pwd123";

    $ds=ldap_connect("$ldap", $port); 
    $ldapbind=false;
    // for debugging
    ldap_set_option(NULL, LDAP_OPT_DEBUG_LEVEL, 9);
    if(ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3))
    if(ldap_set_option($ds, LDAP_OPT_X_TLS_REQUIRE_CERT, 0))
                    if(ldap_set_option($ds, LDAP_OPT_REFERRALS, 0))
                    if(ldap_start_tls($ds))
                            $ldapbind = @ldap_bind($ds, $usr, $pwd);   
    ldap_close($ds);

    if(!$ldapbind)
            echo "BIND ERROR!\n";
    else
            echo "BIND OK!\n";

尝试在本地主机上连接并绑定ldap服务器的位置。 (命令:php testcon.php)。我还向{em> /etc/ldap.conf 添加了TLS_REQCERT never行。

但是我得到了 BIND ERROR!结果。此外,我也收到了警告消息:

PHP Warning:  ldap_start_tls(): Unable to start TLS: Can't contact LDAP server in /root/testfolder/testcon.php on line 16

如果我注释掉16.行,我没有警告,但绑定错误!仍然存在。

进一步的信息:

  • PHP版本:PHP 7.2.5
  • 服务器:openSUSE Leap 15.0
  • ldap:活动目录2.4.46-lp150.7.1
  • 必需的php库已安装

我尝试使用basedn和不使用基本dn(结果相同)。

2 个答案:

答案 0 :(得分:1)

  

无法联系LDAP服务器

这可能意味着两件事:

  1. 服务器无法通过网络或
  2. 访问
  3. 由于证书验证错误而无法建立TLS连接

错误消息

  

ldap_start_tls():无法启动TLS

有点误导,因为在用ldap_connect()初始化上下文之后,TCP连接仍然没有建立。在您的情况下,第一个真正的LDAP操作称为ldap_start_tls(),它正在打开TCP连接。

我建议:

  • 在同一台计算机上使用CLI工具ldapwhoami来检查您是否可以完全连接
  • 即使是测试也不要关闭证书验证

答案 1 :(得分:1)

根据对问题的评论,因为它最终是答案:

将端口更改为389。端口636用于不支持SSL的LDAP over SSL(实际上从未标准化为LDAP的一部分)。 LDAP从端口389开始工作,当您发出StartTLS(使用ldap_start_tls())时,它会加密连接。