我越來越:如何在PHP中解決ldap_start_tls()「無法啓動TLS:連接錯誤」?
警告:ldap_start_tls() [function.ldap啓動-TLS]:無法 開始TLS:在 連接錯誤/var/www/X.php上線Y
/etc/ldap/ldap.conf:
TLS_CACERT /etc/ssl/certs/ca.crt
ca.crt
是簽署LDAP服務器證書的CA。 LDAP服務器上的證書已過期,我無法更改它。
我越來越:如何在PHP中解決ldap_start_tls()「無法啓動TLS:連接錯誤」?
警告:ldap_start_tls() [function.ldap啓動-TLS]:無法 開始TLS:在 連接錯誤/var/www/X.php上線Y
/etc/ldap/ldap.conf:
TLS_CACERT /etc/ssl/certs/ca.crt
ca.crt
是簽署LDAP服務器證書的CA。 LDAP服務器上的證書已過期,我無法更改它。
您可以通過在你的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
發生之前,這是可以做到。
我的解決方案/解決方法是使用
/etc/ldap/ldap.conf:
#TLS_CACERT /etc/ssl/certs/ca.crt
TLS_REQCERT never
如果您有任何更好的想法,請發表另一個答案。
Windows中ldap.conf
的路徑是固定的:
C:\ OpenLDAP的\的sysconf \ ldap.conf的
web服務器的重新啓動可能會更改應用需要。
在我的系統上沒有該目錄 – 2017-04-17 17:57:50
在基於Debian的系統:
安裝軟件包:ldap-utils
和文件中 /etc/ldap/ldap.conf
,編輯該行:
TLS_CACERT /etc/ldap/cacerts/cacert.asc
創建目錄/etc/ldap/cacerts
和CACERT複製到 /etc/ldap/cacerts/cacert.asc
重新啓動apache
。
在基於RedHat系統中:
安裝軟件包:openldap-clients
和文件 /etc/openldap/ldap.conf
編輯該行:
TLS_CACERT /etc/openldap/cacerts/cacert.asc
創建目錄/etc/openldap/cacerts
和CACERT複製到 /etc/openldap/cacerts/cacert.asc
重新啓動httpd
這看起來像是正確的答案(複製我想要信任的特定證書而不是忽略證書驗證)。不幸的是,我們無法驗證它,因爲我們已經過時了那個特定的設置。 – user323094 2015-10-12 10:22:04
它提到「編輯行」,但不是行 – user49438 2017-02-17 22:55:18
中實際正在編輯的內容,請確保提到TLS_CACERT的行具有該值。 – 2017-02-18 03:35:17
別人一些額外的幫助,證明這裏的解決方案解決了我的ldapsearch
命令行的問題,但還是PHP抱怨**Can't contact LDAP server**
使用LDAP端口389和636原來是SELinux在RHEL7(CentOS7)塊HTTPD默認情況下,你可以允許與:
setsebool -P httpd_can_network_connect 1
檢查你的SELinux審覈日誌文件的東西被封鎖。
我使用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服務器。
這樣做並不適合我。我必須做的事情(在線程後面: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
請注意,通過禁用證書驗證,您可以通過允許中間人攻擊來打開安全漏洞。您正在加密傳輸而不驗證目的地! – svandragt 2014-12-02 10:11:16
@svandragt我甚至不在乎這一點。如果它能給我返回一些不是錯誤的東西,我將永遠感激。在運行PHP 5的Windows系統上。3,上面的答案不起作用 – 2017-04-17 17:56:09