繁体   English   中英

PHP LDAP Windows 2008r2更改用户密码

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM