Intereting Posts
API-интерфейс API Карт Google v3 / база данных фильтров PhpMailer не отправляет письма – ошибка TLS? Невозможно запросить разрешение на использование Facebook Login API «publish_actions» даже для основного администратора почему я получаю фатальную ошибку PHP, когда я хочу установить расширение Я хочу преобразовать MySQL-запрос в PDO? Настройка заголовков ответов с промежуточным программным обеспечением в Lumen PHP: Как удалить вложенные теги и перенести их не вложенным образом? Как легко минимизировать JS в PHP … Или что-то еще PHPExcel: чтение всех значений (дата, время, числа) в виде строк проблемы в создании расширенного поиска с использованием запроса Отправка новостных бюллетеней HTML с помощью простого текстового резервного копирования Музыкальное распознавание и обработка сигналов Переменная запроса может быть не более 512 символов «Вызовите undefined .. mssql_connect» при использовании PHP в IIS? автоматическое перенаправление на чистые URL-адреса

Ошибка обновления пароля AD с помощью PHP

Привет, я написал следующий сценарий для обновления пароля для конкретного пользователя

<?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]# 

Что я здесь делаю неправильно? Я играл с шифрованием, но это тоже не помогло. У меня есть Active Directory Windows Server 2012 R2.

Большое спасибо

Выяснилось, что это не проблема с моим кодом. Мне нужно было установить полномочия центра сертификации на моем сервере. Это то, что я сделал,

Убедитесь, что у вашей установки 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 проверил сертификат ssl сервера ldap с центром сертификации, который выдал сертификат, вам необходимо поместить корневой сертификат здесь: Экспортировать доверенный корневой сертификат. (Подробнее см. Шаг 1 в разделе «Как протестировать LDAP через SSL»).

Используйте эту команду для преобразования 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

Надеюсь, это поможет кому-то в будущем.