2013-01-07 19 views
8

मैं एक एपीआई का परीक्षण कर रहा हूं जो curl_exec PHP फ़ंक्शन और सीए प्रमाणपत्र का उपयोग करता है लेकिन कुछ गलत हो रहा है और मैं थोड़ा खो गया हूं।एसएसएल पीयर सर्टिफिकेट या एसएसएच रिमोट कुंजी ठीक नहीं था

मैंने अपने अपाचे वर्चुअलहोस्ट पर SSL कॉन्फ़िगर किया है और ठीक दिखता है (https:://[myVHost] ... काम करता है)।

  • SSL peer certificate or SSH remote key was not OK

मैं बहुत एसएसएल के साथ अनुभव नहीं कर रहा हूँ तो मुझे लगता है कि के कारण के बारे में कुछ विचार है:

हालांकि एपीआई कर्ल कॉल मुझे वापस इस संदेश देते हैं।

अद्यतन:

इस कोड को मैं अपने cURL अनुरोध में उपयोग कर रहा हूँ, मैं 2 लाइनों टिप्पणी की है और बदलता है उनके मूल्य और इस तरह से यह काम कर रहा है में ('यह करें' लाइन पर देखने के) है, लेकिन यह सिर्फ एक arround काम है ...

$opts[CURLOPT_URL] = $url; 
    $opts[CURLOPT_RETURNTRANSFER] = true; 
    $opts[CURLOPT_CONNECTTIMEOUT] = 50; 
    $opts[CURLOPT_TIMEOUT] = 100; 
    $headers = array(
     'Accept: application/json', 
     "User-Agent: APIXXX-PHP-Client"); 
    $opts[CURLOPT_HTTPHEADER] = $headers; 
    $opts[CURLOPT_USERPWD] = $env->getApiKey() . ':'; 
    if (certificatePresent()) { 

     // $opts[CURLOPT_SSL_VERIFYPEER] = true; 
     // $opts[CURLOPT_SSL_VERIFYHOST] = 2; 

     // TODO: SET IT BACK 
     $opts[CURLOPT_SSL_VERIFYPEER] = 0; 
     $opts[CURLOPT_SSL_VERIFYHOST] = 0; 

     $opts[CURLOPT_CAINFO] = $path 

     } 

    curl_setopt_array($curl, $opts); 

    $response = curl_exec($curl); 
+0

हमें अनुरोध करने के लिए उपयोग किए जा रहे पूर्ण और पूर्ण कोड की आवश्यकता है, जिसमें कर्ल विकल्पों के सभी * सेट शामिल हैं। साथ ही, क्या यह एक स्व-हस्ताक्षरित प्रमाण पत्र है? – Charles

+0

जानकारी जोड़ा गया ''स्वयं हस्ताक्षरित प्रमाणपत्र' प्रश्न के बारे में मुझे नहीं पता: प्रमाणपत्र एपीआई के साथ प्रदान करता है ... – WonderLand

+5

आपने रूट कारण सफलतापूर्वक पहचाना है:' CURLOPT_SSL_VERIFYHOST' होने पर 2. 2 पर सेट होने पर , कर्ल सत्यापित करेगा कि प्रमाणपत्र मान्य है, और यह एक सीए द्वारा जारी किया गया है कि यह भरोसा करता है। यदि रिमोट सर्टिफिकेट स्वयं हस्ताक्षरित है या अन्यथा सीए द्वारा जारी नहीं किया गया है, तो यह भरोसा करता है, यह आपको बताएगा और आपको दिया गया एक त्रुटि देगा। यदि आपको किसी तृतीय-पक्ष से प्रमाणपत्र प्राप्त हुआ है, तो आपको उस पर हस्ताक्षर करने वाले सीए पर भरोसा करने के लिए कर्ल को मनाने की आवश्यकता है। आप कहते हैं कि आपको सीए प्रमाण दिया गया था, है ना? आपने इसके साथ क्या किया है? – Charles

उत्तर

4

आप शायद स्व-हस्ताक्षरित SSL सर्टिफिकेट, जो पारित नहीं होगा जब CURLOPT_SSL_VERIFYPEER विकल्प सेट किया गया है का उपयोग कर रहे हैं।

  1. खरीदें वैध SSL प्रमाणपत्र:

    दो समाधान कर रहे हैं।

  2. कर्ल में SSL सत्यापन अक्षम करें। (add --insecure option)

यदि आप सत्यापन अक्षम करते हैं, तो आप सुनिश्चित नहीं हो सकते कि आप वास्तव में अपने होस्ट के साथ संवाद कर रहे हैं या नहीं। तो यह आपको आवश्यक सुरक्षा के स्तर पर निर्भर करता है।

0

यदि आप मैन-इन-द-बीच हमलों के बारे में चिंतित हैं तो आप SSL_VERIFYPEER सक्षम करना चाहते हैं।

क्या आपके $path एपीआई मालिक द्वारा प्रदान किए गए प्रमाणपत्र (या प्रमाणपत्र बंडल) को इंगित करने के लिए सेट है? क्या यह प्रमाणपत्र वेब सर्वर उपयोगकर्ता द्वारा पठनीय है? यदि हां, तो क्या आपने सत्यापित किया है कि सर्टिफिकेट वही है जब आप ब्राउज़र में मैन्युअल रूप से https पते पर जाते हैं और प्रमाणपत्र का निरीक्षण करते हैं?

यदि आप इसे काम नहीं कर पा रहे हैं, और जिस एपीआई से आप कनेक्ट कर रहे हैं उसके पास एक एसएसएल प्रमाणपत्र है जो चेतावनी के बिना आपके सामान्य ब्राउज़र में काम करता है, तो आप अपने सर्वर पर अपने सीए रूट बंडल पर $path सेट करने में सक्षम होना चाहिए।

0

आप एक वैध SSL प्रमाणपत्र बना सकते हैं और यह सुनिश्चित कर सकते हैं कि यह विश्वसनीय फ़ोल्डर में संग्रहीत है।

वैध SSL प्रमाणपत्र VS2012 के डेवलपर कमांड प्रॉम्प्ट में निम्न आदेश को शामिल करके बनाया जा सकता है। (इसे शुरुआत में डेवलपर टाइप करके प्राप्त किया जा सकता है)

निम्न आदेश एक स्व-हस्ताक्षरित प्रमाणपत्र बनाता है जिसका उपयोग वेब सर्वर पर सिक्योर सॉकेट लेयर (एसएसएल) का उपयोग करने वाले वेब एप्लिकेशन का परीक्षण करने के लिए किया जा सकता है जिसका यूआरएल www.example.com है । -eku विकल्प द्वारा परिभाषित ओआईडी उस प्रमाणपत्र को SSL server certificate के रूप में पहचानता है। प्रमाणपत्र मेरे स्टोर में संग्रहीत है और मशीन (उपयोगकर्ता के बजाए) स्तर पर उपलब्ध है।प्रमाणपत्र की निजी कुंजी निर्यात योग्य है, और प्रमाणपत्र May 10, 2010 through December 22, 2011 से मान्य है।

मेकर्ट-आर -पे-एन सीएन = "www.example.com" -b 05/10/2010 -e 12/22/2011 -eku 1.3.6.1.5.5.7.3.1 -ss my -sr localmachine -sky विनिमय -sp "माइक्रोसॉफ्ट आरएसए SChannel क्रिप्टोग्राफिक प्रदाता" -sy 12

कैसे SSL certificate

बनाने अब यकीन है कि यह प्रमाणपत्र विश्वसनीय है बनाने के लिए के बारे में अधिक के लिए, इस में CERTMGR टाइप करके किया जा सकता है cmd ..

अब बनाया गया प्रमाणपत्र व्यक्तिगत फ़ोल्डर में है .. इसे कॉपी करें और इसे ट्रस्ट किए गए लोगों के फ़ोल्डर में पेस्ट करें।

यह चाल करना चाहिए। अगर यह काम नहीं करता है तो मुझे बताएं।

0

मुझे एक ही समस्या थी। मैं यहां निर्देश का पालन करता हूं: http://siteber.com/download-failed-ssl-peer-certificate-or-ssh-remote-key-was-not-ok/ और यह मेरा तय किया गया।

मूल रूप से मैं

/etc/resolv.conf और किसी भी

OpenDNS सर्वर की जगह के लिए चला गया:

208.67.222.222

208.67.220.220

के साथ

Google के सार्वजनिक DNS सर्वर:

नेम सर्वर 8.8.8.8 नेम सर्वर 8.8.4.4

2

हालांकि मैं एक पुराने पोस्ट का जवाब दे रहा हूँ, मुझे लगता है कि यह नया viewers-

आप समस्या की जांच कर सकते मदद मिलेगी

$opts[CURLOPT_VERBOSE] = 1 
जोड़कर

स्वयं हस्ताक्षरित प्रमाणपत्र के लिए आपका ग्राहक आईपी पते का उपयोग कर सर्वर से कनेक्ट हो सकता है, क्योंकि होस्ट नाम DNS कैश में उपलब्ध नहीं है। उस स्थिति में आपके सर्वर प्रमाण पत्र के COMMON NAME (CN) को सर्वर आईपी के साथ मिलान करने की आवश्यकता है (सर्वर प्रमाणपत्र उत्पन्न करते समय आईपी पता सामान्य नाम के रूप में रखें)।

आम नाम: 192.168.0.1 (मिलान)

यहाँ 192.168.0.1 एक उदाहरण है जब आप इसे सही ढंग से करते हैं, तो आपको यह संदेश देख सकते हैं।

CURLOPT_SSL_VERIFYHOST 
CURLOPT_SSL_VERIFYSTATUS 

खबरदार है कि आप को निष्क्रिय सुरक्षा के अपने SSL प्रमाणपत्र ठीक करना चाहिए & सेटिंग्स बजाय:

0

CURLOPT_SSL_VERIFYPEER के अलावा दो अन्य सेटिंग्स false/0 के लिए बदला जा सकता है जो कर रहे हैं!

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