【问题标题】:Issue updating AD password using PHP使用 PHP 更新 AD 密码问题
【发布时间】:2015-03-18 06:31:57
【问题描述】:

您好,我编写了以下脚本来更新特定用户的密码

<?php

function create_ldap_connection() {

        $ip = "192.168.168.1";
        $ldaps_url = "192.168.168.1";

        $port = 389;
        $ldap_conn = ldap_connect($ldaps_url, $port) or die("Sorry! Could not connect to LDAP server ($ip)");

        $password = "password";
        $binddn = "CN=Administrator,CN=Users,DC=ad,DC=test,DC=com";
        $result = ldap_bind( $ldap_conn, $binddn, $password ) or die("  Error: Couldn't bind to server using provided credentials!");

        if($result) {

                return $ldap_conn;
        }
        else {
                die (" Error: Couldn't bind to server with supplied credentials!");
        }
}

function get_user_dn($ldap_conn, $user_name) {

        /* Write the below details as per your AD setting */
        $basedn = "OU=ITS Users,DC=ad,DC=test,DC=com";

        /* Search the user details in AD server */
        $searchResults = ldap_search($ldap_conn, $basedn, $user_name);

        if(!is_resource($searchResults)) die('Error in search results.');
        /* Get the first entry from the searched result */
        $entry = ldap_first_entry($ldap_conn, $searchResults);

        $info = ldap_get_entries($ldap_conn, $searchResults);
        echo $info["count"]." entries returned\n";

        return ldap_get_dn($ldap_conn, $entry);
}

function pwd_encryption($newPassword) {

        $newPassword = "\"" . $newPassword . "\"";
        $len = strlen($newPassword);
        $newPassw = "";

        for ($i = 0; $i < $len; $i++) {

                $newPassw .= "{$newPassword {$i}}\000";
        }

        $userdata["unicodePwd"] = $newPassw;
        return $userdata;
}

$user_name = "(|(sn=archieg*)(SamAccountName=archieg*))";

$user_password = "password!1234";
$ldap_conn = create_ldap_connection();
$userDn = get_user_dn($ldap_conn, $user_name);
$userdata = pwd_encryption ($user_password);

print_r($userdata);

//$result = ldap_mod_replace($ldap_conn, $userDn , $userdata);  /* Check whether the password updated successfully or not. */
$result = ldap_modify($ldap_conn, $userDn , $userdata);

if($result) {

        echo "Success attempting to modify password in AD";
}
else {

        echo "Error: Please try again later!\n";
        $e = ldap_error($ldap_conn);
        $e_no = ldap_errno($ldap_conn);
        echo $e . "\n";
        echo $e_no . "\n";
}

?>

但是当我运行它时,我收到以下错误,

[root@web chpasswd]# php ad_change.php 
PHP Warning:  Module 'intl' already loaded in Unknown on line 0
1 entries returned
Array
(
    [unicodePwd] => "password!1234"
)
Error: Please try again later!
Server is unwilling to perform
53
[root@web chpasswd]# 

我在这里做错了什么?我一直在玩加密,但这也无济于事。我有 Windows Server 2012 R2 Active Directory。

非常感谢

【问题讨论】:

    标签: php active-directory ldap


    【解决方案1】:

    结果证明这不是我的代码的问题。我必须在我的服务器上设置证书颁发机构。这就是我所做的,

    确保您的 PHP 安装同时启用了 ldap 和 openssl 扩展。

    Windows/Linux 程序

    验证 ldap.conf 文件设置。

    对于 Windows,请验证 C:\openldap\sysconf\ldap.conf 文件是否存在。

    对于 Linux,验证 /etc/openldap/ldap.conf 文件是否存在。如果没有,请创建它。

    对于 Linux 和 Windows,ldap.conf 文件应包含以下行:** -

    TLS_REQCERT 从不

    如果你想让 php 向颁发证书的证书颁发机构验证 ldap 服务器的 ssl 证书,你需要把根证书放在这里: 导出受信任的根证书。 (有关详细信息,请参阅如何通过 SSL 测试 LDAP 中的步骤 1)。

    使用此命令将 DER 转换为 PEM:

    openssl x509 -in RootCert.der -inform DER -out RootCert.pem -outform PEM

    在 Windows 上,您可以从以下两个站点下载 openssl 二进制文件:

    http://gnuwin32.sourceforge.net/packages.html

    http://www.ShininglightPro.com/

    现在将 rootcert.pem 复制到 certs 文件夹:

    对于 Linux,/etc/openldap/cert/rootcert.pem

    对于 Windows,C:\openldap\sysconf\certs\rootcert.pem

    对于 Linux 和 Windows,ldap.conf 文件应包含以下行:

    (Linux) TLS_CACERT /etc/openldap/cert/rootcert.pem

    (Windows) TLS_CACERT c:\OpenLDAP\sysconf\certs\rootcert.pem

    你可以在https://github.com/achintha85/AD_User_Password_Change_PHP找到我的最新代码

    希望这对将来的某人有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-10
      • 1970-01-01
      • 1970-01-01
      • 2021-02-09
      • 1970-01-01
      • 1970-01-01
      • 2020-06-01
      • 2020-08-22
      相关资源
      最近更新 更多