Работа в системе EL7 с PHP 5.6 и openldap 2.4.40.
Я могу запросить удаленный сервер ldaps с помощью ldapsearch:
ldapsearch -H ldaps://ldap.example.com -D "CN=serviceaccount,OU=Services,DC=example,DC=com" -x -w "sapass" -LLL -b "DC=example,DC=com " cn="акодер"
Это возвращает ожидаемые данные о пользовательском кодере.
Переходя на 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.