[英]PHP - LDAP search working sporadically over TLS/SSL
下面的代碼對我的LDAP服務器中的所有OrganizationalUnits
進行查找,但是它無法像40%的時間那樣執行LDAP搜索。
我僅有的線索是下面的兩個Apache日志條目。 我不是PHP向導,但是假設第二條錯誤消息是由連接失敗引起的,留下了一個空的$sr
變量。
我在連接期間運行了tcpdump
,PHP 正在連接到服務器,但是在失敗期間幾乎沒有進行任何通信-與成功連接相比,傳輸的數據包只有大約1/2倍。
這似乎只發生在TLS / SSL(hecnce的putenv
最后一搏省力)。 如果我使用純文本格式,則每次搜索都可以完美進行。 是什么導致它“有時”不起作用? 有什么辦法找到更多信息嗎?
更新:我只是注意到此代碼在不使用LDAPS / TLS時100%的時間有效,因此肯定與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
....
我有同樣的問題。 LDAP服務器需要TLS,因此我們必須使用ldaps連接到服務器。 ldap_connect和ldap_bind每次都有效。 但是跟隨ldap_search偶爾會失敗,並顯示“無法聯系LDAP服務器(-1)”錯誤。
在LDAP方面,我可以在ldap服務器上看到一個有效的綁定請求,但僅此而已-.-
我在php7.2上使用CentOS,有人遇到同樣的問題或解決方案嗎?
好的,我改用http://php.net/manual/en/function.ldap-start-tls.php ,它為我解決了問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.