Ошибка Php adLDAP - Не удается выполнить привязку к серверу: Требуется строгая (er) аутентификация
Я пытаюсь использовать PHP adLDAP версии 4.04 для аутентификации в корпоративной сети, но пока безуспешно.
PHP Version 5.2.4
Я попробовал этот пост stackoverflow PHP ldap - требуется строгая (er) аутентификация , не повезло.
Я НЕ администратор на этом контроллере домена; Мне нужно только иметь возможность запрашивать.
Я могу пинговать HOSTNAMEOFDC.domain.location.company.com
(полное доменное имя моего контроллера домена)
Контроллер домена является Windows Server 2012 R2 Standard
.
Я успешно запросил этот контроллер домена с помощью DsQuery
и PowerShell AD Module
без проблем и без проверки подлинности, которую мне пришлось вводить вручную.
Мой код:
<?php
require_once("includes/php/adLDAP/src/adLDAP.php");
$username = "domain\\username"; // also tried just "username"
$password = "somepassword";
// All possible settings are listed in this array
$options = array(
"account_suffix" => "@domain.location.company.com",
// "admin_username" => $username,
// "admin_password" => $password,
// "ad_port" => "636",
// "base_dn" => "DC=domain,DC=location,DC=company,DC=com",
"domain_controllers" => array("HOSTNAMEOFDC.domain.location.company.com"),
// "real_primarygroup" => "",
// "recursive_groups" => "",
// "use_ssl" => true
// "use_tls" => true
);
$adldap = new adLDAP($options);
// $authUser = $adldap->user()->authenticate($username, $password);
$authUser = $adldap->user()->authenticate($username,$password);
if ($authUser) {
echo "User authenticated successfully";
} else {
// getLastError is not needed, but may be helpful for finding out why:
echo $adldap->getLastError() . "<br>";
echo "User authentication unsuccessful";
}
// Destroy
$adldap->close();
$adldap->__destruct();
?>
Я получаю ошибку:
Warning: ldap_bind() [function.ldap-bind]: Unable to bind to server: Strong(er) authentication required in C:\xampp\htdocs\Workspace\Project\scripts\includes\php\adLDAP\src\adLDAP.php on line 712
Strong(er) authentication required
User authentication unsuccessful
Затем, когда я раскомментирую "use_ssl" => true"
Я получаю эту ошибку:
К вашему сведению, ssl
загружено в мой php.ini
Warning: ldap_bind() [function.ldap-bind]: Unable to bind to server: Can't contact LDAP server in C:\xampp\htdocs\Workspace\Project\scripts\includes\php\adLDAP\src\adLDAP.php on line 712
Can't contact LDAP server
User authentication unsuccessful
Я также пытался раскомментировать "use_tls" => true"
, и я получаю эту ошибку:
Warning: ldap_start_tls() [function.ldap-start-tls]: Unable to start TLS: Connect error in C:\xampp\htdocs\Workspace\Project\scripts\includes\php\adLDAP\src\adLDAP.php on line 638
Warning: ldap_bind() [function.ldap-bind]: Unable to bind to server: Can't contact LDAP server in C:\xampp\htdocs\Workspace\Project\scripts\includes\php\adLDAP\src\adLDAP.php on line 712
Can't contact LDAP server
User authentication unsuccessful
1 answers
Этот ответ относится к PHP 5.2-5.3, эта ошибка была исправлена в более новых версиях (возможно)
Досадно, когда PHP выдает ошибку Невозможно выполнить привязку к серверу: Требуется строгая (er) аутентификация - на самом деле это говорит вам, что ему нужен сертификат или группа сертификатов НА ВАШЕМ ЛОКАЛЬНОМ КОМПЬЮТЕРЕ и укажите на них файл .conf
.
Я создал каталог: C:\openldap\sysconf
(ранее он не существовал).
Я сделал файл ldap.conf
в C:\openldap\sysconf
В *nix вы, вероятно, поместили бы его в /etc
или вложенный каталог, но я еще не проверял это.
Я пошел и нашел файл PEM для наших сертификатов и извлек его в каталог (файл PEM - это в основном вся цепочка сертификатов в одном файле).
В ldap.conf
Я добавил строку: TLS_CACERT C:\openldap\sysconf\Certs.pem
Если вы не можете получить сертификаты PEM, вместо этого вы можете использовать TLS_REQCERT never
. Будьте осторожны, делая это. Вы подвергаете себя нападению человека в середине делая это. Он не будет проверять конечную точку.
Как только я сделал это, я успешно связался.
Если это не сработает, попробуйте поместить ldap.conf
в C:\
(корневой уровень); похоже, это зависит от того, какую версию PHP вы используете - он решает искать в разных местах для ldap.conf
.