PHP - LDAP поиск работает спорадически по TLS / SSL - PullRequest
0 голосов
/ 05 декабря 2018

Приведенный ниже код выполняет поиск всех OrganizationalUnits на моем сервере LDAP, однако он не может выполнять поиск LDAP, как 40% времени.

Единственные подсказки, которые у меня есть, - это две записи журнала Apache ниже,Я не волшебник PHP, но предположим, что второе сообщение об ошибке вызвано неудачным соединением, оставив пустую переменную $sr.

Я запустил tcpdump во время соединения, а PHP - это при подключении к серверу, но при сбое происходит очень мало связи - только около половины передаваемых пакетов по сравнению с успешным соединением.

Похоже, что это происходит только по протоколу TLS / SSL (за исключением последней попытки putenv).Если я иду открытым текстом, поиск работает идеально каждый раз.Что заставило бы это не работать "иногда"?Любой способ узнать больше информации об этом?

Обновление: Я только что заметил, что этот код работает 100% времени, когда не используется LDAPS / TLS, поэтому определенно как-то связан с SSL / TLS.

<?php
   putenv('TLS_REQCERT=never');
   print "<html><head><title>ldap test</title></head><body>";

   $ldapconn = ldap_connect("ldaps://my.ldap.com") or die("Could not connect to LDAP server.");
   ldap_set_option($ldapconn, LDAP_OPT_PROTOCOL_VERSION, 3);

   if ($ldapconn)
   {
      $basedn = "dc=my,dc=ldap,dc=com";
      $attributes = array("ou","cn");
      $sr = ldap_search ($ldapconn, $basedn, "(ObjectClass=OrganizationalUnit)", $attributes);
      $info = ldap_get_entries($ldapconn, $sr);
   }

   if ($info["count"] > 0)
   {
      for ($i=0; $i < $info["count"]; $i++)
      {
         $ou = $info[$i]["ou"][0];
         print "<br><input type='radio' name='ldap_ou' value='$ou'>$ou<br>";
      }
   }

   print "</body></html>";

?>

Ошибки Apache:

PHP Warning:  ldap_search(): Search: Can't contact LDAP server in /var/www/test.php on line 14
PHP Warning:  ldap_get_entries() expects parameter 2 to be resource, boolean given in /var/www/test.php on line 15

Обновление 2 (информация об ошибке отладки):

...
ldap_prepare_socket: 18
ldap_connect_to_host: Trying 10.14.13.92:636
ldap_pvt_connect: fd: 18 tm: -1 async: 0
TLS: peer cert untrusted or revoked (0x42)
TLS: can't connect: (unknown error code).
ldap_err2string
....

1 Ответ

0 голосов
/ 21 декабря 2018

У меня такая же проблема.Сервер LDAP хочет TLS, поэтому мы должны использовать ldaps для подключения к серверу. ldap_connect и ldap_bind работает каждый раз.Но после ldap_search происходит сбой спорадически с Невозможно связаться с сервером LDAP (-1) ошибка.

На стороне LDAP я вижу рабочий запрос на связывание на моем сервере ldap, но ничего более -.-

Я использую CentOS с php7.2, у кого-нибудь были такие же проблемы или какое-то решение?


Хорошо, я перешел на использование http://php.net/manual/en/function.ldap-start-tls.php которая решила проблему для меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...