[英]php7 ldap connect and bind via TLS
我有這個簡單的php文件:
$ldap="localhost";
$port=636;
$usr="CN=admin";
$pwd="pwd123";
$ds=ldap_connect("$ldap", $port);
$ldapbind=false;
// for debugging
ldap_set_option(NULL, LDAP_OPT_DEBUG_LEVEL, 9);
if(ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3))
if(ldap_set_option($ds, LDAP_OPT_X_TLS_REQUIRE_CERT, 0))
if(ldap_set_option($ds, LDAP_OPT_REFERRALS, 0))
if(ldap_start_tls($ds))
$ldapbind = @ldap_bind($ds, $usr, $pwd);
ldap_close($ds);
if(!$ldapbind)
echo "BIND ERROR!\n";
else
echo "BIND OK!\n";
我嘗試在本地主機上連接並綁定ldap服務器的位置。 (命令: php testcon.php
)。 我也將TLS_REQCERT never
添加到/etc/ldap.conf中。
但是我收到了錯誤提示! 結果。 此外,我也得到了警告味精:
PHP Warning: ldap_start_tls(): Unable to start TLS: Can't contact LDAP server in /root/testfolder/testcon.php on line 16
如果我注釋掉16.行,我沒有警告,但是綁定錯誤! 停留。
進一步的信息:
我嘗試使用basen和沒有基礎dn(相同的結果)。
無法聯系LDAP服務器
這可能意味着兩件事:
錯誤訊息
ldap_start_tls():無法啟動TLS
這有點誤導,因為在使用ldap_connect()
初始化上下文之后,仍未建立TCP連接。 在您的情況下,第一個真正的LDAP操作名為ldap_start_tls()
,它正在打開TCP連接。
我建議:
ldapwhoami
來檢查是否可以連接 根據對問題的評論,因為它最終是答案:
將端口更改為389。端口636用於不支持SSL的LDAP over SSL(實際上從未標准化為LDAP的一部分)。 LDAP從端口389開始工作,當您發出StartTLS(使用ldap_start_tls())時,它將對連接進行加密。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.