У меня есть виртуальная машина под управлением CentOS 7 с установленным стеком LAMP. На виртуальной машине я пытаюсь создать соединение LDAPS с моим контроллером домена, который является виртуальной машиной Windows 2008 R2. Используемый мной SSL-сертификат самоподписан, и CA был добавлен в доверие CentOS 7 CA.
Я могу подключиться к контроллеру домена через ldapsearch. Когда уровень отладки ldapsearch установлен в 1, я могу проверить, что мой сертификат действителен.
ex.) ldapsearch -H "ldaps://server.ad.com" -D "domain\user-name" -W -d 1
Всякий раз, когда я пытаюсь использовать LDAPS через php, я получаю ldap_connect () как успех, но ldap_bind () всегда выдает ошибку -1 Не могу связаться с сервером LDAP. Ниже приведен пример кода:
<?php
define(LDAP_OPT_DIAGNOSTIC_MESSAGE,0x0032);
echo "defined LDAP_OPT_DIAGNOSTIC_MESSAGE <br />";
$handle = ldap_connect("ldaps://server.ad.com:636");
echo "called ldap_connect <br />";
$errorCode = ldap_errno( $handle );
echo "error code: $errorCode <br />";
$errorMsg = ldap_error( $handle );
echo "error message: $errorMsg <br />";
if (!$handle)
{
echo "ldap_connect method returned null <br />";
}
else
{
echo "ldap_connect returned a handle! <br />";
}
$bind = ldap_bind($handle, 'domain\user', 'password');
echo "called ldap_bind <br />";
$errorCode2 = ldap_errno( $handle );
echo "error code: $errorCode2 <br />";
$errorMsg2 = ldap_error( $handle );
echo "error message: $errorMsg2 <br />";
if (!$bind)
{
echo "ldap_bind method returned null <br />";
}
else
{
echo "ldap_bind returned a bind! <br />";
}
if(ldap_get_option($handle, LDAP_OPT_DIAGNOSTIC_MESSAGE, $extended_error))
{
echo "Error binding to LDAP: $extended_error";
}
else
{
echo "Error bind to LDAP: No additional information is available.";
}
?>
Выход:
defined LDAP_OPT_DIAGNOSTIC_MESSAGE
called ldap_connect
error code: 0
error message: Success
ldap_connect returned a handle!
called ldap_bind
error code: -1
error message: Can't contact LDAP server
ldap_bind method returned null
Error bind to LDAP: No additional information is available.
Я чувствую, что «Не удается связаться с сервером LDAP» является слишком общим для сообщения об ошибке, поэтому я попытался добавить LDAP_OPT_DIAGNOSTIC_MESSAGE (http://php.net/manual/en/function.ldap-bind.php -первый комментарий). Но это не похоже на работу.
Есть идеи?
После дальнейших исследований я обнаружил, что запуск этого файла PHP через командную строку будет успешно связан. Это было только при просмотре из браузера.
Получив эту информацию, я смог задать еще один вопрос по ServerFault и обнаружил, что эта привязка фактически не работает из-за конфигурации SELinux.
Пожалуйста, смотрите полный ответ здесь:https://serverfault.com/questions/677013/php-executes-with-different-results-in-command-line-than-when-browsed-to-in-apac
Других решений пока нет …