![](/img/trans.png)
[英]Change LDAP user password using PHP in windows server 2008
[英]PHP LDAP Windows 2008r2 Change users password
我在这里安装了Windows Server 2008r2,并设置了Active Directory,DNS,DHCP和DC进行测试,对于LDAP来说我还是一个新手。
即使我不是管理员,我也想为自己更改密码。
所以,这是我现在正在处理的脚本:
// LDAP Variables
$serverip = "192.168.2.1";
$serverport = 636;
$username = "user";
$userpassword = "password1";
$newpass = "password2";
$userDn = "CN=$username,CN=Users,DC=dc-name";
$ldapconn = ldap_connect($serverip, $serverport) or die("LDAP Connection Failed!\n");
ldap_set_option($ldapconn, LDAP_OPT_REFERRALS, 0);
ldap_set_option($ldapconn, LDAP_OPT_PROTOCOL_VERSION, 3);
if ($ldapconn) {
echo "Connection succeded\n";
// LDAP Bind
$bindresult = ldap_bind($ldapconn, $username, $userpassword);
if ($bindresult) {
echo "Bind: Succeded\n";
$userData['unicodePwd'] = toPwEntry($newpass);
$modresult = ldap_mod_replace($ldapconn, $userDn , $userData);
if (!$modresult) echo "PW Change Failed - Error No. ". ldap_errno($ldapconn).": " .ldap_error($ldapconn) . "\n";
}
else echo "Bind Failed - Error No. ". ldap_errno($ldapconn).": " .ldap_error($ldapconn) . "\n";
}
else echo "Connection failed - Error No. ". ldap_errno($ldapconn).": " .ldap_error($ldapconn) . "\n";
function toPwEntry($pw) {
return("\"". iconv('UTF-8','UTF-16LE',$pw) ."\"");
}
ldap_close($ldapconn);
当我启动脚本时,出现此错误:
soenke@work:~/Desktop/$ php ldap.php
Connection succeded
Bind Failed - Error No. -1: Can't contact LDAP server
我也尝试通过在IP前面使用“ ldaps://”来尝试连接,但它不起作用。 我将不胜感激任何帮助!
一些建议:
ldap_bind()
希望使用$userDN
而不是$username
。 但这将导致不同的错误消息。
在调用ldap_bind()
,Web服务器和ldap服务器之间没有实际的网络通信,因此请确保没有任何防火墙/网络问题,等等。错误消息显示“无法联系服务器”; 那可能正是正在发生的事情。 ( ldap_connect()
函数只是在更高版本的ldap库中初始化本地结构。您可以将其更像是“ ldap_init()”,“连接成功”消息并不表示此处已成功建立网络。)
您可以在389(而不是636)上设置LDAP服务器来处理安全连接和不安全连接。请确保在服务器期望的位置进行连接。
如果您的TLS连接结束无法验证服务器证书,则也可能会出现这些症状。 您要么必须提供根证书才能信任,要么将客户端配置为不验证证书(例如,如果服务器具有自签名证书)。 可以通过在ldap.conf文件中设置变量来实现上述任何一种。 放置ldap.conf的位置取决于您的Web服务器设置。
这个: http : //www.novell.com/coolsolutions/tip/5838.html以及这个: http : //www.whatsnoodle.com/php-ldap_bind-gives-the-error-cant-contact-ldap-server/可能会为您提供更多详细信息。
Active Directory仅允许您通过LDAPS更改密码,我敢肯定您必须使用端口636。
指定LDAPS://时,请大写。 MS提供者的名称中至少有一个区分大小写。 我不完全确定它是LDAP。 我已经为所有绰号使用帽子了多年。
我认为您的密码必须是一个八位字节串(字节数组)。 我看不懂PHP,所以我无法确定那是您在做什么,但我猜测是这样。
您的域控制器将需要证书才能执行LDAPS。 我不是证书专家,但我认为您用于服务器的名称必须与证书上的名称匹配,并且通常不是IP地址(尽管我认为您可以在证书上使用其他名称),所以我认为您应该使用服务器名称。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.