मैं curl का उपयोग कर एक PHP स्क्रिप्ट लिखने की कोशिश कर रहा हूं जो किसी उपयोगकर्ता नाम और पासवर्ड के अलावा किसी SSL प्रमाणपत्र का उपयोग करने वाले पृष्ठ के माध्यम से अधिकृत कर सकता है, और मुझे लगता है कि मुझे लगता है एसएसएल प्रमाण चरण पिछले।एसएसएल प्रमाणपत्रों के साथ PHP कर्ल का उपयोग करने में त्रुटि
इस मामले में, curl_setopt($handle, CURLOPT_VERIFYPEER, 0)
दुर्भाग्य से कोई विकल्प नहीं है। प्रमाण पत्र प्रमाणीकरण का एक आवश्यक हिस्सा है, अन्यथा मुझे this other similar SO post में उल्लिखित त्रुटि मिलती है।
मैं कुछ कमांड लाइन की कोशिश की है cURL के साथ चलता है:
> curl --url https://website
यह (60) SLL certificate problem
त्रुटि देता है। अगर मैं आदेश को समायोजित --cacert
विकल्प शामिल करने के लिए:
> curl --url https://website --cacert /path/to/servercert.cer
यह सिर्फ ठीक काम करता है; लेख वेबसाइट वापस आ गई है।
हालांकि, मैं निम्नलिखित PHP कोड की कोशिश की है:
$handle = curl_init();
$options = array(
CURLOPT_RETURNTRANSFER => false,
CURLOPT_HEADER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_SSL_VERIFYHOST => '0',
CURLOPT_SSL_VERIFYPEER => '1',
CURLOPT_CAINFO => '/path/to/servercert.cer',
CURLOPT_USERAGENT => 'Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)',
CURLOPT_VERBOSE => true,
CURLOPT_URL => 'https://website'
);
curl_setopt_array($handle, $options);
curl_exec($handle);
if (curl_errno($handle)) {
echo 'Error: ' . curl_error($handle);
}
curl_close($handle);
मैं सोचा होगा कोड अनिवार्य रूप से खोल आदेशों के अनुरूप था, लेकिन इसके बजाय मैं निम्न त्रुटि संदेश के साथ स्वागत कर रहा हूँ:
Error: error setting certificate verify locations: CAfile: /path/to/servercert.cer CApath: none
मैंने उन सभी साहित्य को पढ़ा है जिन्हें मैं पा सकता हूं (विशेष रूप से php.net और curl.haxx पर) और इस समस्या को हल करने वाले कुछ भी नहीं मिलते हैं। कोई सुझाव?
EDIT: मैंने chmod 777 servercert.cer
को सफलता के बिना प्रयास किया है। हालांकि, उपरोक्त कोड के साथ PHP स्क्रिप्ट को php test.php
के माध्यम से ब्राउज़र की बजाय कमांड लाइन से निष्पादित करने में, यह पूरी तरह से काम करता है। ब्राउजर में यह क्यों काम नहीं करता है इसके लिए कोई स्पष्टीकरण?
EDIT 2: इन ड्राइव-डाउनवॉट्स द्वारा केवल एक ही आत्माओं पर डाउनवॉट्स इस सवाल का जवाब देने के लिए पर्याप्त बहादुर हैं। या तो कुछ सार्थक योगदान दें या पास करें, कृपया।
क्या PHP को निश्चित रूप से उस फ़ाइल को पढ़ने की अनुमति है? कमांड लाइन से स्क्रिप्ट चलाने का प्रयास करें: php my.php – Greg
अजीब! जैसा आपने कहा था मैंने इसका परीक्षण किया, और यह पूरी तरह से काम किया! यह कमांड लाइन से क्यों काम करेगा, लेकिन ब्राउजर नहीं? – Magsol
http://serverfault.com/questions/121768/curl-or-ssl-problems-how-to-solve/297484#297484 –