我有这个简单的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.行,我没有警告,但绑定错误!仍然存在。
进一步的信息:
我尝试使用basedn和不使用基本dn(结果相同)。
答案 0 :(得分:1)
无法联系LDAP服务器
这可能意味着两件事:
错误消息
ldap_start_tls():无法启动TLS
有点误导,因为在用ldap_connect()
初始化上下文之后,TCP连接仍然没有建立。在您的情况下,第一个真正的LDAP操作称为ldap_start_tls()
,它正在打开TCP连接。
我建议:
ldapwhoami
来检查您是否可以完全连接答案 1 :(得分:1)
根据对问题的评论,因为它最终是答案:
将端口更改为389。端口636用于不支持SSL的LDAP over SSL(实际上从未标准化为LDAP的一部分)。 LDAP从端口389开始工作,当您发出StartTLS(使用ldap_start_tls())时,它会加密连接。