2010-04-22 17 views
9

मैं हो रही है:मैं PHP में ldap_start_tls() "टीएलएस शुरू करने में असमर्थ: त्रुटि त्रुटि" कैसे हल करूं?

चेतावनी: ldap_start_tls() [function.ldap-शुरू-TLS]: शुरू टीएलएस करने में असमर्थ: में त्रुटि कनेक्ट लाइन पर /var/www/X.php Y

/etc/ldap/ldap.conf:

TLS_CACERT  /etc/ssl/certs/ca.crt 

ca.crt सीए जो LDAP सर्वर प्रमाण पत्र पर हस्ताक्षर किए है। एलडीएपी सर्वर पर प्रमाण पत्र समाप्त हो गया है और मैं इसे बदल नहीं सकता।

उत्तर

18

आप अपने php कोड में

putenv('LDAPTLS_REQCERT=never'); 

जारी करके खिड़कियों में वैधता को नजरअंदाज कर सकते हैं।

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

एक बेहतर विचार प्राप्त करने के लिए: * nix में आप

TLS_REQCERT never 

एक और बात को रोकने के लिए है के बारे में पता है कि यह जरूरी है कि संस्करण 3 (संस्करण 2 php डिफ़ॉल्ट है) होने के लिए अपने /etc/ldap.conf संपादित करने की जरूरत

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 में। यह मिल गया और तुरंत काम कर रहा है। –

+3

कृपया यह नहीं कि प्रमाणपत्र सत्यापन को अक्षम करके आप मध्य हमले में आदमी को अनुमति देकर सुरक्षा छेद खोलें। आप गंतव्य की पुष्टि किए बिना संचरण एन्क्रिप्ट कर रहे हैं! – svandragt

+0

@svandragt मुझे इस बिंदु पर भी परवाह नहीं है। अगर यह मुझे कुछ ऐसा वापस कर देगा जो कोई त्रुटि नहीं है तो मैं हमेशा से आभारी रहूंगा। एक विंडोज सिस्टम पर PHP 5 चल रहा है।3, उपर्युक्त उत्तर –

2

मेरे समाधान/वैकल्पिक हल

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

उपयोग करने के लिए आप किसी भी बेहतर विचार है, तो एक और उत्तर पोस्ट कृपया है।

1

Windows में ldap.conf के लिए पथ तय हो गई है:

c: \ openldap \ sysconf \ ldap.conf

वेब सर्वर को पुनः प्रारंभ परिवर्तनों को लागू करने के लिए आवश्यक हो सकता है।

+0

पर काम नहीं करता है मेरे पास –

1
  1. डेबियन आधारित सिस्टम में:

    पैकेज स्थापित करें: ldap-utils और फ़ाइल में /etc/ldap/ldap.conf, रेखा को संपादित:

    TLS_CACERT /etc/ldap/cacerts/cacert.asc 
    

    निर्देशिका /etc/ldap/cacerts बनाएँ और /etc/ldap/cacerts/cacert.asc को cacert कॉपी

    पुनरारंभ apache

  2. redhat आधारित सिस्टम में:

    पैकेज स्थापित करें: openldap-clients और फ़ाइल /etc/openldap/ldap.conf संपादन में लाइन:

    TLS_CACERT /etc/openldap/cacerts/cacert.asc 
    

    निर्देशिका /etc/openldap/cacerts बनाएँ और /etc/openldap/cacerts/cacert.asc

    को cacert कॉपी

    पुनरारंभ httpd

+0

पर वह निर्देशिका नहीं है यह सही उत्तर की तरह दिखता है (प्रमाण पत्र सत्यापन को अनदेखा करने के बजाय मैं विशिष्ट प्रमाण को कॉपी करना चाहता हूं)। दुर्भाग्यवश, मैं इसे और सत्यापित नहीं कर सकता क्योंकि हमने उस विशेष सेटअप को अप्रचलित कर दिया है। – user323094

+0

यह "लाइन संपादित करें" का उल्लेख करता है लेकिन वास्तव में लाइन – user49438

+0

में संपादित नहीं किया जा रहा है, मेरा मतलब है, यह सुनिश्चित करें कि TLS_CACERT का उल्लेख करने वाली रेखा में वह मान है। –

0

दूसरों के लिए कुछ अतिरिक्त मदद, प्रमाण पत्र यहाँ समाधान मेरी ldapsearch कमांड लाइन समस्या हल हो जाती है, लेकिन अभी पीएचपी शिकायत की **Can't contact LDAP server**

LDAP बंदरगाहों 389 और 636 का उपयोग करने से RHEL7 (CentOS7) ब्लॉक HTTPD पर पता चला SELinux होने के लिए डिफ़ॉल्ट रूप से, आप अनवरोधित कर सकते हैं:

setsebool -P httpd_can_network_connect 1 

अवरुद्ध होने वाली चीज़ों के लिए अपनी SELinux ऑडिट लॉग फ़ाइल देखें।

0

मैं मैकोज़ सर्वर 5 एलडीएपी के साथ अमेज़ॅन लिनक्स (लोचदार बीनस्टॉक PHP 7.0) पर ओपनडैप के साथ ठीक से काम करने में सक्षम था, टीएलएस सेट मांगने के साथ।

/etc/openldap/ldap.conf में

:

TLS_REQCERT मांग

TLS_CACERT /etc/openldap/certs/yourcacert.pem

(ध्यान दें कि आप प्रयोग नहीं कर रहे हैं openldap, पथ /etc/ldap/certs/yourcacert.pem होगा)। यह सेटअप तब तक काम नहीं करता जब तक कि मैंने प्रमाण पत्र को कॉर्ट फ़ोल्डर में नहीं रखा; यह किसी अन्य पथ से काम नहीं करता था।

उस पथ में रखा जाने वाला प्रमाण पत्र सर्वर का टीएलएस प्रमाण पत्र नहीं है। यह प्राधिकरण का सीए (सर्टिफिकेट अथॉरिटी) प्रमाण पत्र है जिसने सर्वर/डोमेन विशिष्ट टीएलएस प्रमाणपत्र जारी किया है। उस पथ में केवल सीए प्रमाणपत्र ही एलएलएपी को PHP में बांधने से पहले टीएलएस को काम करने की अनुमति देगा। अपने सर्वर से सीए प्रमाण पत्र प्राप्त करें या इसे प्राधिकरण की साइट से डाउनलोड करें, वे स्वतंत्र रूप से उपलब्ध हैं।

यह जांचने के लिए कि क्या एलडीएपी बाइंड टीएलएस के बिना भी काम कर रहा है, TLS_REQCERT कभी अस्थायी रूप से सेट नहीं करें (TLS_CACERT को # टिप्पणी करने की आवश्यकता हो सकती है)। अगर आपको "एलडीएपी से कनेक्ट नहीं किया जा सकता" तो यह एक टीएलएस त्रुटि नहीं है; यह बस सर्वर से कनेक्ट नहीं हो सकता है और आपको पोर्ट 38 9 खोलने की आवश्यकता है (टीएलएस के लिए 636 नहीं)।

हर बार जब आप कॉन्फ़िगरेशन फ़ाइल या प्रमाणपत्र में कोई परिवर्तन करते हैं तो अपने अपाचे सर्वर को पुनरारंभ करना याद रखें।

संबंधित मुद्दे