2010-04-22 27 views

回答

18

您可以通過在你的PHP代碼發行

putenv('LDAPTLS_REQCERT=never'); 

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

TLS_REQCERT never 

另一件事要注意的是,它需要第3版(版本2是php默認):

$con = ldap_connect($hostnameSSL); 
ldap_set_option($con, LDAP_OPT_PROTOCOL_VERSION, 3); 

爲了得到一個更好的主意這是怎麼回事,你可以啓用調試日誌記錄的:

ldap_set_option(NULL, LDAP_OPT_DEBUG_LEVEL, 7); 

ldap_connect發生之前,這是可以做到。

+0

這樣做並不適合我。我必須做的事情(在線程後面:http://www.mediawiki.org/wiki/Thread:Extension_talk:LDAP_Authentication/Unable_to_start_TLS_-_Warning_on_line_577)是設置$ wgLDAPEncryptionType = array('YOUR_DOMAIN'=>'clear' );在LocalSettings.php中。這讓它立即起作用。 – 2012-11-29 10:39:32

+3

請注意,通過禁用證書驗證,您可以通過允許中間人攻擊來打開安全漏洞。您正在加密傳輸而不驗證目的地! – svandragt 2014-12-02 10:11:16

+0

@svandragt我甚至不在乎這一點。如果它能給我返回一些不是錯誤的東西,我將永遠感激。在運行PHP 5的Windows系統上。3,上面的答案不起作用 – 2017-04-17 17:56:09

2

我的解決方案/解決方法是使用

/etc/ldap/ldap.conf: 
#TLS_CACERT /etc/ssl/certs/ca.crt 
TLS_REQCERT never 

如果您有任何更好的想法,請發表另一個答案。

1

Windows中ldap.conf的路徑是固定的:

C:\ OpenLDAP的\的sysconf \ ldap.conf的

web服務器的重新啓動可能會更改應用需要。

+0

在我的系統上沒有該目錄 – 2017-04-17 17:57:50

1
  1. 在基於Debian的系統:

    安裝軟件包:ldap-utils和文件中 /etc/ldap/ldap.conf,編輯該行:

    TLS_CACERT /etc/ldap/cacerts/cacert.asc 
    

    創建目錄/etc/ldap/cacerts和CACERT複製到 /etc/ldap/cacerts/cacert.asc

    重新啓動apache

  2. 在基於RedHat系統中:

    安裝軟件包:openldap-clients和文件 /etc/openldap/ldap.conf編輯該行:

    TLS_CACERT /etc/openldap/cacerts/cacert.asc 
    

    創建目錄/etc/openldap/cacerts和CACERT複製到 /etc/openldap/cacerts/cacert.asc

    重新啓動httpd

+0

這看起來像是正確的答案(複製我想要信任的特定證書而不是忽略證書驗證)。不幸的是,我們無法驗證它,因爲我們已經過時了那個特定的設置。 – user323094 2015-10-12 10:22:04

+0

它提到「編輯行」,但不是行 – user49438 2017-02-17 22:55:18

+0

中實際正在編輯的內容,請確保提到TLS_CACERT的行具有該值。 – 2017-02-18 03:35:17

0

別人一些額外的幫助,證明這裏的解決方案解決了我的ldapsearch命令行的問題,但還是PHP抱怨**Can't contact LDAP server**

使用LDAP端口389和636原來是SELinux在RHEL7(CentOS7)塊HTTPD默認情況下,你可以允許與:

setsebool -P httpd_can_network_connect 1 

檢查你的SELinux審覈日誌文件的東西被封鎖。

0

我使用MacOS Server 5 LDAP在Amazon Linux(Elastic Beanstalk PHP 7.0)上使用openldap可以正常工作,TLS設置爲需求。

在/etc/openldap/ldap.conf中

TLS_REQCERT需求

TLS_CACERT /etc/openldap/certs/yourcacert.pem

(注意,如果你不使用OpenLDAP的,該路徑將是/etc/ldap/certs/yourcacert.pem)。在將證書放入證書文件夾之前,此設置無效;它沒有從任何其他路徑工作。

要放在該路徑中的證書不是服務器的TLS證書。它是頒發服務器/域特定TLS證書的機構的CA(證書頒發機構)證書。只有放置在該路徑中的CA證書才允許TLS在嘗試使用php中的LDAP綁定之前工作。從服務器獲取CA證書或從授權機構的網站下載它們,它們可以免費使用。

要測試LDAP綁定是否在沒有TLS的情況下工作,請永遠不要臨時設置TLS_REQCERT(可能需要註釋#out TLS_CACERT)。如果您收到「無法連接到LDAP」,則不是TLS錯誤;它根本無法連接到服務器,您可能需要打開端口389(而不是TLS的636端口)。

請記住每次更改配置文件或證書時重新啓動Apache服務器。

相關問題