start_tls()
и ldaps
являются взаимоисключающими, то есть вы не можете выдать start_tls()
на порт ssl (стандарт 636) или инициировать ldaps
на незашифрованный порт (стандарт 389). Команда start_tls()
инициирует безопасное соединение на незашифрованном порту после инициализации соединения, поэтому вы должны выполнить это до того, как произойдет привязка, чтобы сделать его зашифрованным. Другой набор общих портов - это 3268 (незашифрованные) и 3269 (ssl), которые могут быть включены на вашем сервере.
ldap_set_option(NULL, LDAP_OPT_DEBUG_LEVEL, 7);
записывает в журнал ошибок вашего веб-сервера, в зависимости от уровня вашего журнала, или в полный (из PHP CLI). Чтобы получить больше информации, проверьте настройки уровня журнала вашего веб-сервера или просто запустите скрипт php из командной строки.
Чтобы успешно использовать порт ssl, вам нужно указать префикс ldaps://
, тогда как на незашифрованном порту это необязательно (с префиксом ldap://
).
Глядя на ваш код, это может быть проблемой версии протокола, поскольку PHP по умолчанию использует версию 2. Чтобы решить эту проблему, вы можете выполнить:
ldap_set_option($conn, LDAP_OPT_PROTOCOL_VERSION,3);
ldap_set_option($conn, LDAP_OPT_REFERRALS,0);
перед попыткой связать.
Вы также можете взглянуть на код в Проблемы с безопасным связыванием с Active Directory с использованием PHP , который я успешно использую в CentOS 5, но возникают проблемы в Ubuntu. Если ваш сервер имеет открытый незашифрованный порт, рекомендуется исключить незашифрованное связывание с ним, чтобы исключить любые проблемы с подключением.
Чтобы проверить, открыт ли порт, вы можете проверить, подключен ли к нему telnet, E.G:
telnet my.server.com 3268
Если порт открыт, то вы сможете связываться с ним.
* Редактировать : Если сертификат ssl считается недействительным, соединение не будет установлено; в этом случае установка уровня отладки на 7 сообщит об этом. Чтобы обойти эту конкретную проблему, вам нужно игнорировать действительность:
Вы можете игнорировать действительность в Windows, введя
putenv('LDAPTLS_REQCERT=never');
в вашем php-коде. В * nix вам нужно отредактировать ваш /etc/ldap.conf так, чтобы он содержал
TLS_REQCERT never