2011-05-13 47 views
6

我有一個PHP腳本,它執行LDAP連接,綁定和搜索。它與大多數Active Directory服務器一起工作得非常好,但我們的客戶之一有問題。該腳本返回PHP ldap - 需要強(er)認證

Strong(er) authentication required. 

嘗試ldap_bind時發生錯誤。

所有我做了搜索指示我兩個可能的問題:

  1. 我必須設置LDAP_OPT_PROTOCOL_VERSION3 - 這是我做的,做之前,所以這不可能是我的問題。
  2. AD服務器配置爲使用SSL身份驗證 - 但我們的客戶端堅持認爲它是默認的Windows 2008 R2服務器安裝,並且默認情況下不默認爲SSL。

什麼原因可能導致此錯誤發生?

UPDATE

它所需的Active Directory服務器上的SSL ...

+1

你連接使用LDAPS:// SSL端口上?如果你省略了ldaps:// - 那麼PHP會試圖做一個未加密的綁定 – 2011-05-16 11:27:43

+0

打賭你Jon Starpeteig是正確的,我有完全相同的問題,直到我明白使用ldaps。檢查LDAP部分下的phpinfo()以確保它具有SASL支持 – David 2011-05-16 21:57:46

+0

我知道ldaps://並且配置極其困難。從AD服務器導出證書,將它們複製到Linux機器上,將它們轉換爲pem,說服openssl使用它們...因此,我沒有使用ldaps://,據我所知AD服務器不會'要求安全的身份驗證,至少我們的客戶告訴我們這是一個基本的安裝...不幸的是,我不能檢查它自己,並在每個AD服務器上我嘗試了它的工作完美的腳本,除了上面提到的一個。 – 2011-05-17 13:39:23

回答

5

你如果它是由Active Directory服務器需要使用ldaps://。如果這是無效的證書頒發機構的問題,您可以通過在您的PHP代碼中發佈

putenv('LDAPTLS_REQCERT=never'); 

來忽略窗口的有效性。在* nix中,你需要編輯/etc/ldap.conf包含

TLS_REQCERT never 

對於其他常見的問題,你可以參考我的文章在PHP cannot connect to LDAP Oracle Directory Server Enterprise Edition

對於工作示例代碼,你可以看看:​​

+0

我的LDAP服務器沒有域名。我可以設置'ldaps://'嗎? – Casper 2017-03-08 12:45:14

+0

我想知道是否可以關閉安全警告並繼續使用ldap://修改ldap服務器中的數據。 – Casper 2017-03-13 20:31:56

1

我有同樣的問題,似乎在我的bind_rdn有一個錯字,所以請確保憑據是正確的。

0

消息 「要求強(ER)認證」,如果你嘗試使用更新LDAP實體也出現:

  • ldap_modify
  • ldap_mod_replace
  • ldap_modify_batch

不調用綁定功能與可選參數:

string $bind_rdn = NULL [, string $bind_password = NULL 

此代碼將無法正常工作:

$ldap = ldap_connect($ldap_url); 
ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3); 
ldap_set_option($ldap, LDAP_OPT_REFERRALS, 0); 

$bind = ldap_bind($ldap); 

$userdata=array(); 
$userdata['userattribute'][0]='test'; 

ldap_modify ($ldap, "cn=myuser,dc=example,dc=com", $userdata); 

此代碼的工作,請注意不同的呼叫綁定功能:

$ldap = ldap_connect($ldap_url); 
ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3); 
ldap_set_option($ldap, LDAP_OPT_REFERRALS, 0); 

$bind = ldap_bind($ldap,'cn=admin,dc=example,dc=com','secretpassword'); 

$userdata=array(); 
$userdata['userattribute'][0]='test'; 

ldap_modify ($ldap, "cn=myuser,dc=example,dc=com", $userdata);