Работает на EL7-системе с PHP 5.6 и openldap 2.4.40.ldap_bind() не работает с «Не удается связаться с сервером LDAP»
Я могу запросить удаленный сервер LDAPS с помощью ldapsearch:
ldapsearch -H LDAPS: //ldap.example.com -D «CN = ServiceAccount, OU = Services, DC = пример , DC = ком»-x -w "sapass" -LLL -b "DC = пример, DC = ком" сп = "acoder"
Это возвращает ожидаемые данные о пользователе acoder.
Переходя к PHP, я пытаюсь связать с тем же сервером, используя те же учетные данные и передать (sapass) выше.
// server settings
$srvc_id = 'serviceaccount';
$srvc_pass = "somepass";
$ldap_host = "ldaps://ldap.example.com";
$srvc_dn = "CN=$srvc_id,OU=Services,DC=example,DC=com";
$user_filter = "(uid=$form_user)";
$ldap_conn = ldap_connect($ldap_host);
if ($ldap_conn)
{
echo "<p>Connected to \$ldap_host $ldap_host at line ";
$r = ldap_bind($ldap_conn, $srvc_dn, $srvc_pass);
if (!$r)
{
echo "<p>failed to bind with service account credentials.";
} else {
echo "<p>binded OK.";
}
}
Если я временно добавить это /etc/openldap/ldap.conf
, скрипт работает:
TLS_REQCERT never
После того, как я комментирую, что из, скрипт завершается с «Не удается связаться с сервером LDAP».
Если я добавлю TLS_CACERTDIR /etc/openldap/certs
в ldap.conf
, сценарий отлично работает при вызове из командной строки.
TLS_CACERTDIR /etc/openldap/certs
# TLS_REQCERT never ### only use for testing ###
Похоже, HTTPD не читает необходимый сертификат и, таким образом, не в состоянии общаться с удаленным сервером LDAP.
Учебники по настройке PHP/LDAP Я изучил работу с EL6, и я запускаю EL7.