PHP не может подключиться к LDAP Oracle Directory Server Enterprise Edition

Играл с этим в течение нескольких дней и не мог заставить php связываться с ldap на DSEE Oracle.

function test(){ // LDAP variables $ldaphost = "xxx.xxxxx.com"; $ldapport = 636; $ldaprdn = 'cn=xyxyxyxy,ou=Accounts,dc=xxx,dc=xxxxx,dc=com'; $ldappass = 'vcvcvcvcvc'; ldap_set_option(NULL, LDAP_OPT_DEBUG_LEVEL, 7); // isn't helping // Connecting to LDAP $ldapconn = ldap_connect($ldaphost, $ldapport) or die("Could not connect to $ldaphost"); if ($ldapconn) { // binding to ldap server $ldapbind = ldap_bind($ldapconn, $ldaprdn, $ldappass); // verify binding if ($ldapbind) { echo "LDAP bind successful..."; } else { echo "LDAP bind failed..."; } } } 

Я получаю сообщение об ошибке:

Сообщение: ldap_bind () [function.ldap-bind]: невозможно связать с сервером: не удается связаться с сервером LDAP

Разрывая мои волосы на этом. Я просто не могу связать вещь.

Попробовал прямое telnet для хоста на порту 636 и не заблокирован каким-либо брандмауэром. В частности, я не получаю дополнительной информации об отладке из «LDAP_OPT_DEBUG_LEVEL» на экране или в моих журналах.

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, EG:

 telnet my.server.com 3268 

Если порт открыт, вы можете связать его.

* Изменить : если сертификат ssl считается недопустимым, соединение завершится неудачно, если это так, установив уровень отладки на 7, вы объявите об этом. Чтобы обойти эту конкретную проблему, вам нужно игнорировать ее действительность:

Вы можете игнорировать действительность в окнах, выдавая

 putenv('LDAPTLS_REQCERT=never'); 

в вашем php-коде. В файле * nix вам необходимо отредактировать файл /etc/ldap.conf, чтобы он содержал

 TLS_REQCERT never 

Порт 636 является портом с поддержкой SSL и требует подключения с поддержкой SSL. Вы должны попытаться подключиться к порту 389 или изменить свой код, чтобы включить безопасный уровень (гораздо более сложный).

С уважением,

Лодовико

Чтобы подключиться с помощью SSL, вы должны попробовать

 $ldapconn = ldap_connect('ldaps://'.$ldaphost); 

Это автоматически подключится к порту 636, который является стандартным ldaps . В зависимости от установки и конфигурации вашего сервера может быть возможно, что подключения разрешены только на порту 389 (без шифрования или использования TLS) или только на порту 636 с использованием SSL-шифрования. Хотя возможно, что ваш сервер предоставляет другие порты. Таким образом, в общем, вам нужно знать, к какому порту подключаться и какой метод шифрования требуется серверу (без шифрования, SSL или TLS).

Является ли сертификат сервера LDAP подписанным действительным ЦС? Возможно, ваш клиент просто отвергает сертификат!