簡體   English   中英

php7 ldap通過TLS連接並綁定

[英]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.行,我沒有警告,但是綁定錯誤! 停留。

進一步的信息:

  • PHP版本:PHP 7.2.5
  • 服務器:openSUSE Leap 15.0
  • ldap:活動目錄2.4.46-lp150.7.1
  • 必需的php庫已安裝

我嘗試使用basen和沒有基礎dn(相同的結果)。

無法聯系LDAP服務器

這可能意味着兩件事:

  1. 服務器無法通過網絡或
  2. 由於證書驗證錯誤而無法建立TLS連接

錯誤訊息

ldap_start_tls():無法啟動TLS

這有點誤導,因為在使用ldap_connect()初始化上下文之后,仍未建立TCP連接。 在您的情況下,第一個真正的LDAP操作名為ldap_start_tls() ,它正在打開TCP連接。

我建議:

  • 在同一台計算機上使用CLI工具ldapwhoami來檢查是否可以連接
  • 即使測試也不要關閉證書驗證

根據對問題的評論,因為它最終是答案:

將端口更改為389。端口636用於不支持SSL的LDAP over SSL(實際上從未標准化為LDAP的一部分)。 LDAP從端口389開始工作,當您發出StartTLS(使用ldap_start_tls())時,它將對連接進行加密。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM