Приведенный ниже код выполняет поиск всех 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
....