我正在尝试连接到一个ldap服务器,客户的IT人员说该服务器没有SSL证书。这是在他们的域上的一个测试文件上,该文件安装了SSL。假设文件位于https://client.org/test_LDAP.php
因此,我使用非常简单的代码进行连接,在过去的一个月里,它与另一个客户机进行了良好的连接:
ldap_set_option(NULL, LDAP_OPT_DEBUG_LEVEL, 7);
define("LDAP_SERVER","ldap://name.their.junk");
define("LDAP_BASE","CN=Users,DC=their,DC=junk");
$username = 'CN=Username,'.LDAP_BASE;
$password = "Password";
$ldap = ldap_connect(LDAP_SERVER, 389) or die("Can't connect to LDAP server");
ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3) ;
if (ldap_bind($ldap, $username, $password)) {
ldap_unbind($ldap);
echo 'OK - Login valid';
} else {
die(ldap_error($ldap) . ' (' . ldap_errno($ldap) . ')');
}
如果我在安装了SSL的域中运行代码,这是否意味着我必须使用ldaps和端口636,即使客户端的AD服务器没有证书?我已经在一个不安全的启动域和他的安全的活动域上尝试了使用两个端口和ldap:和ldap的代码。似乎什么都不管用。但他发誓用户名和密码以及所有变量都是正确的,并告诉我使用他们的IP主机名(例如ldap:000.0000.00)。
我是不是做错了什么?
是的,我确实在服务器端正确配置了LDAP,因为我们最近刚刚能够对另一个客户端做同样的事情。
任何见解都将不胜感激。
如果您尝试在Windows 2003 Server Active Directory或更高版本上执行搜索,似乎必须将LDAP_OT_REFERRALS选项设置为0:
ldap_connect(..)
ldap_set_option ($ldap, LDAP_OPT_REFERRALS, 0);
ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_bind(..)