2017-04-12 87 views
0

我正在嘗試使用PHP LDAP模塊將身份驗證層置於組織的某些內容上。如果我將LDAP_OPT_X_TLS_REQUIRE_CERT設置爲0,該腳本完美工作,但如果我不這樣做,則會出現以下錯誤。未定義PHP LDAP選項

  • ldap_error()返回「無法綁定到服務器:無法聯繫LDAP服務器」
  • ldap_get_option()爲LDAP_OPT_ERROR_STRING回報「:對方的證書頒發者無法識別TLS錯誤-8179」。

This page表明可以通過將LDAP服務器的安全證書放在我自己的服務器上來解決Peer的證書錯誤。我向IT部門請求了PEM。現在我需要確定它放在哪裏。

當我嘗試通過LDAP_OPT_X_TLS_CACERTDIR打印ldap_get_option(),以獲得預期的證書目錄,我得到警告「ldap_get_option()預計參數2是整數,字符串中給定」。實際上,當我回顯LDAP_OPT_X_TLS_CACERTDIR本身時,結果實際上就是該字符串,而不是整數。

例如:

echo LDAP_OPT_SIZELIMIT . '<br />'; 
echo LDAP_OPT_ERROR_STRING . '<br />'; 
echo LDAP_OPT_X_TLS_CACERTDIR; 
die(); 

結果:

3 
50 
LDAP_OPT_X_TLS_CACERTDIR 

這是每一個LDAP_OPT_X_問題?選項列在the documentation中,但LDAP_OPT_X_TLS_REQUIRE_CERT除外,後者打印爲24582.

有誰知道爲什麼這些選項沒有定義?

+0

您使用哪個版本的PHP? – heiglandreas

+0

我們使用的版本是7.0.17 – tkm256

回答

2

Ldap-Option LDAP_OPT_X_TLS_CACERTDIR在PHP 7.1中引入PHP的LDAP擴展(https://github.com/php/php-src/commit/8e9e89610e2e196892dbb7b605c65923a3fedf87)。所以當你使用PHP 7.0時,沒有真正的機會讓你自己動手修改PHP源代碼。最簡單的選擇是更新到PHP 7.1

+0

謝謝,我升級到了7.1.4,現在我可以獲取並設置選項。 – tkm256

+0

對於遇到此問題的其他人,如果您的PHP是針對OpenLDAP編譯的,則還需要查看/etc/openldap/ldap.conf中的TLS_CACERTDIR和TLS_REQCERT –