file_get_contents (): SSL ऑपरेशन कोड 1 के साथ विफल हुआ, क्रिप्टो सक्षम करने में विफल


187

मैं अपने सर्वर पर बनाए गए PHP पेज से इस विशेष REST सेवा तक पहुँचने की कोशिश कर रहा हूँ। मैंने समस्या को इन दो पंक्तियों तक सीमित कर दिया। तो मेरा PHP पेज इस तरह दिखता है:

<?php
$response = file_get_contents("https://maps.co.weber.ut.us/arcgis/rest/services/SDE_composite_locator/GeocodeServer/findAddressCandidates?Street=&SingleLine=3042+N+1050+W&outFields=*&outSR=102100&searchExtent=&f=json");

echo $response; ?>

पृष्ठ निम्न त्रुटियों के साथ लाइन 2 पर मर जाता है:

  • चेतावनी: file_get_contents (): SSL ऑपरेशन कोड 1 के साथ विफल हुआ। OpenSSL त्रुटि संदेश: त्रुटि: 14090086: SSL रूटीन: SSL3_GET_SERVER_CERTIFICATE: प्रमाणपत्र सत्यापन विफल हुआ ... पंक्ति 2 में php के लिए
    • चेतावनी: file_get_contents (): पंक्ति 2 में crypto ... php को सक्षम करने में विफल
    • चेतावनी: file_get_contents ( https://maps.co.weber.ut.us/arcgis/rest/services/SDE_composite_locator/GeocodeServer/findAddressCandidates?Street=&SingleLine=3042+N+1050+W&outFields=*&outSR=102100&searchExtent=&f=json): स्ट्रीम खोलने में विफल: ऑपरेशन में विफल ... लाइन 2 पर php

हम एक Gentoo सर्वर का उपयोग कर रहे हैं। हमने हाल ही में PHP संस्करण 5.6 में अपग्रेड किया है। यह अपग्रेड के बाद था जब यह समस्या सामने आई।

मैंने पाया कि जब मैं REST सेवा को एक पते के साथ प्रतिस्थापित करता हूं जैसे https://www.google.com; मेरा पेज ठीक काम करता है।

पहले के प्रयास में मैंने सेट किया “verify_peer”=>false, और पास किया कि file_get_contents के तर्क के रूप में, जैसा कि यहाँ वर्णित है: file_get_contents verify_peer => को अनदेखा कर रहा है? लेकिन जैसे लेखक ने नोट किया; इससे कोई फर्क नहीं पड़ा।

मैंने अपने सर्वर प्रशासकों से पूछा है कि क्या हमारे php.ini फ़ाइल में ये लाइनें मौजूद हैं:

  • विस्तार = php_openssl.dll
  • allow_url_fopen = पर

उन्होंने मुझे बताया कि चूंकि हम जेंटू में हैं, इसलिए जब हम निर्माण करते हैं तो ओपनसेल संकलित होता है; और यह php.ini फ़ाइल में सेट नहीं है।

मैंने यह भी पुष्टि की कि allow_url_fopenकाम कर रहा है। इस समस्या की विशेष प्रकृति के कारण; मुझे मदद के लिए बहुत सारी जानकारी नहीं मिल रही है। क्या आप में से कोई इस तरह से आया है? धन्यवाद।


यदि आप कैस्परस्की का उपयोग करते हैं, तो इसे देखें: stackoverflow.com/a/54791481/3549317
cespon

जवाबों:


342

यह खोजने के लिए एक बहुत ही उपयोगी लिंक था:

http://php.net/manual/en/migration56.openssl.php

PHP 5.6 में ssl खोलने के लिए किए गए परिवर्तनों का वर्णन करने वाला एक आधिकारिक दस्तावेज़ यहाँ से मुझे एक और पैरामीटर के बारे में पता चला जो मुझे झूठे में सेट करना चाहिए: "verify_peer_name" => झूठा

नोट: इसके बहुत महत्वपूर्ण सुरक्षा निहितार्थ हैं। सत्यापन को अक्षम करना संभावित रूप से अनुरोधों पर एक अमान्य प्रमाण पत्र का उपयोग करने के लिए एक MITM हमलावर की अनुमति देता है । हालांकि यह स्थानीय विकास में ऐसा करने के लिए उपयोगी हो सकता है, उत्पादन में अन्य तरीकों का उपयोग किया जाना चाहिए।

तो मेरा काम कोड इस तरह दिखता है:

<?php
$arrContextOptions=array(
    "ssl"=>array(
        "verify_peer"=>false,
        "verify_peer_name"=>false,
    ),
);  

$response = file_get_contents("https://maps.co.weber.ut.us/arcgis/rest/services/SDE_composite_locator/GeocodeServer/findAddressCandidates?Street=&SingleLine=3042+N+1050+W&outFields=*&outSR=102100&searchExtent=&f=json", false, stream_context_create($arrContextOptions));

echo $response; ?>

122
यह एसएसएल प्रमाणन को तोड़ता है और
हाइपर 2k

8
जैसा कि @ hypery2k ने बताया, आपको सत्यापन को अक्षम नहीं करना चाहिए। एक वैकल्पिक समाधान के लिए मेरा जवाब देखें जो ssl के उपयोग के उद्देश्य को नहीं हराता है।
elitechief21

4
यह वास्तव में नहीं किया जाना चाहिए। समस्या को साइड-स्टेप करने के बजाय आपको वास्तव में इसे ठीक करना चाहिए। @ Elitechief21 से बेहतर समाधान देखें।
जैस्पर

5
यदि आप एक एपीआई के खिलाफ स्थानीय वातावरण से परीक्षण कर रहे हैं तो यह निराशाजनक हो सकता है। इस मामले में मैं आम तौर पर सत्यापन को शून्य करता हूं।
हैप्पीकोडर

12
चूँकि मैं हमेशा यहाँ आता हूँ जब मैं ऐसा करने की कोशिश करता हूँ, यहाँ आसानी से कॉपी और पेस्ट करने का कोड है:file_get_contents($url, false, stream_context_create(array('ssl' => array('verify_peer' => false, 'verify_peer_name' => false))));
laurent

153

आपको केवल सत्यापन बंद नहीं करना चाहिए। बल्कि आपको एक प्रमाणपत्र बंडल डाउनलोड करना चाहिए, शायद कर्ल बंडल करेगा?

फिर आपको बस इसे अपने वेब सर्वर पर डालने की जरूरत है, जिससे उपयोगकर्ता को फाइल पढ़ने की अनुमति मिलती है। फिर इस कोड को आपके लिए काम करना चाहिए:

$arrContextOptions=array(
    "ssl"=>array(
        "cafile" => "/path/to/bundle/cacert.pem",
        "verify_peer"=> true,
        "verify_peer_name"=> true,
    ),
);

$response = file_get_contents("https://maps.co.weber.ut.us/arcgis/rest/services/SDE_composite_locator/GeocodeServer/findAddressCandidates?Street=&SingleLine=3042+N+1050+W&outFields=*&outSR=102100&searchExtent=&f=json", false, stream_context_create($arrContextOptions));

उम्मीद है, जिस साइट पर आप पहुंचने का प्रयास कर रहे हैं उसका रूट सर्टिफिकेट कर्ल बंडल में है। यदि यह नहीं है, तब भी यह तब तक काम नहीं करेगा जब तक कि आप साइट का मूल प्रमाण पत्र प्राप्त न कर लें और इसे अपनी प्रमाणपत्र फ़ाइल में न डाल दें।


.Crt फ़ाइल कहाँ से आती है? कर्ल वेबसाइट में कोई लिंक नहीं है जो आप इसे प्रदान करते हैं। यह केवल .pem है।
वी

1
पेम फ़ाइल समान होनी चाहिए। जिस समय यह पोस्ट किया गया था, उनके पास अपनी साइट पर प्रमाणपत्र बंडल के दो संस्करण थे, एक पेम और एक crt और मैंने सिर्फ अपने उदाहरण के लिए crt फ़ाइल का उपयोग किया (स्वाभाविक रूप से वह जिसे वे हटाएंगे)। भविष्य के संदर्भ के लिए, crt फाइलें आमतौर पर नामांकित pem फाइलें होती हैं, जिनका नाम बदल दिया जाता है ताकि विंडोज़ फ़ाइल को प्रमाण पत्र फ़ाइल के रूप में पहचान सके। यह हमेशा मामला नहीं होगा, लेकिन यह इस मामले में है। मैं अपने उदाहरण को अपडेट करूंगा ताकि वह कर्ल साइट पर वर्तमान में
पेम

4
theres भी एक उपयोगी कार्य है stream_context_set_defaultजो आप इस्तेमाल किया जा सकता है ताकि आप इसे file_get_contents में हर बार पास न करें
केन कोच

क्या किसी को यह काम करने के लिए कभी मिला? मैंने इस उत्तर में जुड़े cacert.pem बंडल के साथ कोशिश की, और कोमोडो सीए रूट प्रमाणपत्र के साथ (जो कि प्रमाण पत्र के लिए सीए रूट है जो मैं सत्यापित करना चाहता हूं), लेकिन यह हमेशा विफल रहेगा।
19

1
सुरक्षा के दृष्टिकोण से: कैफ़ाइल स्ट्रीम संदर्भ विकल्प के उपयोग के बगल में, सिफर स्ट्रीम संदर्भ विकल्प में अनुमत सिफर को परिभाषित करना और उन एसएसएल संस्करणों को निषिद्ध करना भी बहुत महत्वपूर्ण हो सकता है जिन्हें कमजोर के रूप में जाना जाता है। साथ ही स्ट्रीम संदर्भ विकल्प को निष्क्रिय करने के लिए निष्क्रिय_कंपनी को सही करने के लिए CRIME हमले वेक्टर को कम करने की सिफारिश की गई है।
जोसेफ ग्लिट्ज

36

मैंने यह सुनिश्चित करके कि OpenSSL मेरी मशीन पर स्थापित किया गया था और फिर इसे मेरे php.ini में जोड़कर तय किया:

openssl.cafile=/usr/local/etc/openssl/cert.pem

@ अक्खी आपको कुछ ट्यूटोरियल खोजने में सक्षम होना चाहिए यदि आप इसे Google
andlin

2
मैंने IIS 7 पर PHP 7 का उपयोग करते हुए एक ही विधि का उपयोग किया, cert.pemफ़ाइल को डाउनलोड किया और php.iniइस तरह सेट किया , और यह काम किया:openssl.cafile=D:\Tools\GnuWin32\bin\cacert.pem
डेविड रेफौ

1
मैंने curl.haxx.se/docs/caextract.html से PEM फ़ाइल डाउनलोड की - एक विशेष gstatic.com URL के साथ विंडोज पर मेरे लिए समस्या तय की।
जेक

PEM फ़ाइल को curl.haxx.se/docs/caextract.html से डाउनलोड करना मेरे लिए Centos 7. पर काम नहीं किया। मैंने मुख्य प्रमाणपत्र और pkcs7 को समाहित करके एक बंडल प्रमाणपत्र बनाया और इसे सर्वर पर रखा और फिर canl.cafile पथ निर्दिष्ट किया। सही उत्तर और दिशा के लिए +1।
अरविंद के।

एक बंडल बनाते समय pkcs को pem फाइल में बदलने से पहले उसे मुख्य प्रमाणन तक पहुँचाना न भूलें
अरविंद के।

21

आप कर्ल का उपयोग करने वाले एक कस्टम फ़ंक्शन लिखकर इस समस्या को हल कर सकते हैं:

function file_get_contents_curl( $url ) {

  $ch = curl_init();

  curl_setopt( $ch, CURLOPT_AUTOREFERER, TRUE );
  curl_setopt( $ch, CURLOPT_HEADER, 0 );
  curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );
  curl_setopt( $ch, CURLOPT_URL, $url );
  curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, TRUE );

  $data = curl_exec( $ch );
  curl_close( $ch );

  return $data;

}

इसके बाद जब भी आप url की शुरुआत करते हैं file_get_contents_curl, file_get_contentsतो इसके बजाय https से शुरू करें।


इसने मेरे लिए काम किया। बहुत अच्छा काम और धन्यवाद!
निक ग्रीन

12

मेरे लिए काम करना, मैं PHP 5.6 का उपयोग कर रहा हूं। Opensl एक्सटेंशन को सक्षम किया जाना चाहिए और Google मैप को कॉल करते समय api verify_peer झूठी करें कोड मेरे लिए काम कर रहा है।

<?php
$arrContextOptions=array(
    "ssl"=>array(
         "verify_peer"=>false,
         "verify_peer_name"=>false,
    ),
);  
$url = "https://maps.googleapis.com/maps/api/geocode/json?latlng="
      . $latitude
      . ","
      . $longitude
      . "&sensor=false&key="
      . Yii::$app->params['GOOGLE_API_KEY'];

$data = file_get_contents($url, false, stream_context_create($arrContextOptions));

echo $data;
?>

10

यदि आपका PHP संस्करण 5 है, तो टर्मिनल में निम्न कमांड टाइप करके cURL स्थापित करने का प्रयास करें:

sudo apt-get install php5-curl

9
इससे कोई लेना-देना नहीं है cURL
एंड्रियास

2
Php कर्ल को स्थापित करना सही उत्तर होना चाहिए! मेरे मैक सिस्टम के लिए, मैं पोर्ट का उपयोग कर रहा हूं, और कमांड है:sudo port install php70-curl
hailong

8

आपको मूल रूप से पर्यावरण चर SSL_CERT_FILE को निम्नलिखित लिंक से डाउनलोड किए गए ssl-प्रमाणपत्र की PEM फ़ाइल के पथ पर सेट करना होगा: http://curl.haxx.se/ca/cacert.pem

मुझे यह पता लगाने में बहुत समय लगा।


लिंक काम नहीं किया, लेकिन मैंने पाया कि यह समान है: akrabat.com/ssl-certificate-verification-on-php-5-6
डैनियल पी

6

नीचे दिए गए चरणों से यह समस्या ठीक हो जाएगी,

  1. इस लिंक से CA प्रमाणपत्र डाउनलोड करें: https://curl.haxx.se/ca/cacert.pem
  2. ढूँढें और php.ini खोलें
  3. जिस सर्टिफिकेट को आपने डाउनलोड किया है, curl.cainfoउस संपूर्ण पथ को देखें और पेस्ट करें ।curl.cainfo ="C:\wamp\htdocs\cert\cacert.pem"
  4. WAMP / XAMPP (अपाचे सर्वर) को पुनरारंभ करें।
  5. यह काम करता हैं!

उम्मीद है की वो मदद करदे !!


क्या यह सुरक्षित है? मैं आसान समाधान प्यार करता हूँ, लेकिन यहाँ कुछ जानकारी याद आती है ..
swisswiss

परीक्षण के लिए ठीक है
जियोमोरिलो

5

बस मैं इसे जोड़ना चाहता था क्योंकि मैं एक ही समस्या में भाग गया था और कुछ भी नहीं जो मुझे कहीं भी मिल सकता था (जैसे cacert.pem फ़ाइल डाउनलोड करना, php.ini में कैफ़ाइल सेट करना आदि)

यदि आप NGINX का उपयोग कर रहे हैं और आपका एसएसएल सर्टिफिकेट "इंटरमीडिएट सर्टिफिकेट" के साथ आता है, तो आपको इंटरमीडिएट सर्टिफिकेट फाइल को अपनी मुख्य "mydomain.com.crt" फाइल के साथ मिलाना होगा और यह काम करना चाहिए। अपाचे में मध्यवर्ती सीट्स के लिए एक विशिष्ट सेटिंग है, लेकिन NGINX ऐसा नहीं करता है क्योंकि यह आपके नियमित रूप से प्रमाणित फ़ाइल के समान होना चाहिए।


4

इस त्रुटि का कारण यह है कि PHP के पास विश्वसनीय प्रमाणपत्र अधिकारियों की सूची नहीं है।

PHP 5.6 और बाद में सिस्टम द्वारा भरोसा किए गए CA को स्वचालित रूप से लोड करने का प्रयास करता है। इसके साथ मुद्दे तय किए जा सकते हैं। अधिक जानकारी के लिए http://php.net/manual/en/migration56.openssl.php देखें ।

PHP 5.5 और इससे पहले सही ढंग से सेटअप करने के लिए वास्तव में कठिन हैं क्योंकि आपको मैन्युअल रूप से प्रत्येक अनुरोध संदर्भ में CA बंडल को निर्दिष्ट करना होगा, एक चीज जिसे आप अपने कोड के आसपास छिड़कना नहीं चाहते हैं। इसलिए मैंने अपने कोड के लिए निर्णय लिया कि PHP संस्करणों के लिए <5.6, एसएसएल सत्यापन केवल अक्षम हो जाता है:

$req = new HTTP_Request2($url);
if (version_compare(PHP_VERSION, '5.6.0', '<')) {
    //correct ssl validation on php 5.5 is a pain, so disable
    $req->setConfig('ssl_verify_host', false);
    $req->setConfig('ssl_verify_peer', false);
}

इससे मुझे अपनी समस्या का पता लगाने में मदद मिली। भले ही मैं PHP 5.6 पर हूं, मैं एक पुरानी एपीआई क्लाइंट लाइब्रेरी का उपयोग कर रहा था, जो कि ऊपर दिए गए लिंक के अनुसार कैफ़ाइल संदर्भ विकल्प का उपयोग करके मैन्युअल रूप से एक पुरानी सीए फ़ाइल निर्दिष्ट करता है। एपि क्लाइंट लाइब्रेरी से इसे हटाकर मेरे लिए तय किया। संभवतः PHP ने ओपनएसएसएल विश्वसनीय बंडल का उपयोग करना शुरू किया
जो लिप्सन

4

XAMPP और OSX पर PHP 7 के साथ एक ही त्रुटि थी।

Https://stackoverflow.com/ में उपर्युक्त उत्तर अच्छा है, लेकिन इसने मेरे लिए समस्या को पूरी तरह से हल नहीं किया। मुझे फिर से काम करने के लिए file_get_contents () बनाने के लिए पूर्ण प्रमाणपत्र श्रृंखला प्रदान करनी थी। मैंने इसे कैसे किया:

रूट / इंटरमीडिएट प्रमाणपत्र प्राप्त करें

सबसे पहले मुझे यह पता लगाना था कि रूट और इंटरमीडिएट प्रमाणपत्र क्या है।

सबसे सुविधाजनक तरीका शायद एसएसएल-शॉपर्स की तरह एक ऑनलाइन सर्टिफिकेट-टूल है

वहां मुझे तीन सर्टिफिकेट, एक सर्वर-सर्टिफिकेट और दो चेन-सर्टिफिकेट (एक रूट है, दूसरा एक इंटरमीडिएट इंटरमीडिएट है)।

बस मुझे इन दोनों के लिए इंटरनेट पर सर्च करना होगा। मेरे मामले में, यह मूल है:

thawte DV एसएसएल SHA256 सीए

और यह उनके url thawte.com की ओर जाता है । इसलिए मैंने इस सर्टिफिकेट को एक टेक्स्टफाइल में रखा और इंटरमीडिएट के लिए भी यही किया। किया हुआ।

मेजबान प्रमाणपत्र प्राप्त करें

अगली बात मुझे अपना सर्वर सर्टिफिकेट डाउनलोड करना है। Linux या OS X पर इसे ओपनस्स्ल के साथ किया जा सकता है:

openssl s_client -showcerts -connect whatsyoururl.de:443 </dev/null 2>/dev/null|openssl x509 -outform PEM > /tmp/whatsyoururl.de.cert

अब इन सबको साथ लेकर आएं

अब बस उन सभी को एक फाइल में मर्ज कर दें। (शायद उन्हें सिर्फ एक फ़ोल्डर में रखना अच्छा है, मैंने उन्हें केवल एक फ़ाइल में मिला दिया है)। आप इसे इस तरह से कर सकते हैं:

cat /tmp/thawteRoot.crt > /tmp/chain.crt
cat /tmp/thawteIntermediate.crt >> /tmp/chain.crt
cat /tmp/tmp/whatsyoururl.de.cert >> /tmp/chain.crt

जहां श्रृंखला खोजने के लिए PHP बताओ

यह आसान कार्य है जो Opensl_get_cert_locations () आपको बताता है, जहां PHP प्रमाणित फ़ाइलों की तलाश में है। और यह पैरामीटर है, जो file_get_contents () को प्रमाणित फ़ाइलों को देखने के लिए बताएगा। शायद दोनों तरीके काम करेंगे। मैंने पैरामीटर तरीका पसंद किया। (ऊपर वर्णित समाधान की तुलना में)।

तो यह अब मेरा PHP-Code है

$arrContextOptions=array(
    "ssl"=>array(
        "cafile" => "/Applications/XAMPP/xamppfiles/share/openssl/certs/chain.pem",
        "verify_peer"=> true,
        "verify_peer_name"=> true,
    ),
);

$response = file_get_contents($myHttpsURL, 0, stream_context_create($arrContextOptions));

बस इतना ही। file_get_contents () फिर से काम कर रहा है। CURL के बिना और सुरक्षा खामियों के बिना उम्मीद है।


फाइल क्या है chain.pem? क्या यह है chain.crt?
डॉक्स

यह वास्तविक प्रमाण पत्र के लिए chain.crt नहीं है। यह सूची है अगर मध्यवर्ती प्रमाण पत्र, उर्फ ​​प्रमाणपत्र श्रृंखला। आप इसे जरूरी नहीं है। यदि आपको इसकी आवश्यकता है, तो यह जानने के लिए एक SSL सर्टिफिकेट चेकर का उपयोग करें। यदि ऐसा है, तो आप सही फ़ाइल को खोजने के लिए अपने सर्टिफिकेट जारीकर्ता + "चेन" या "इंटरमीडिएट" के नाम की खोज कर सकते हैं।
nr

4

Php5.6 पर php को अपडेट करने के बाद centOS पर इस समस्या का शिकार होने के बाद मुझे एक समाधान मिला जो मेरे लिए काम करता है।

डिफ़ॉल्ट रूप से इसके साथ रखे जाने के लिए अपने निर्देशिका के लिए सही निर्देशिका प्राप्त करें

php -r 'print_r(openssl_get_cert_locations()["default_cert_file"]);'

फिर प्रमाण पत्र प्राप्त करने के लिए इसका उपयोग करें और इसे ऊपर दिए गए कोड से प्राप्त डिफ़ॉल्ट स्थान पर रखें

wget http://curl.haxx.se/ca/cacert.pem -O <default location>

3

मेरे डेवलपर मशीन पर समान ssl-problem थी (php 7, windows पर xampp) जिसमें एक स्व-हस्ताक्षरित प्रमाण पत्र के साथ " https: // localhost / ..." - फाइल को खोलने की कोशिश की गई थी। जाहिर है कि रूट-सर्टिफिकेट-असेंबली (cacert.pem) ने काम नहीं किया। मैंने अभी-अभी apache server.crt-file से कोड को डाउनलोड cacert.pem में मैन्युअल रूप से कॉपी किया और php.ini में /sac.cafile = path / to / cacert.pem प्रविष्टि को खोला।


2

एक और बात यह है ca-certificatesकि यहां विस्तृत रूप में फिर से स्थापित करना है

# yum reinstall ca-certificates
...
# update-ca-trust force-enable 
# update-ca-trust extract

और कोशिश करने के लिए एक और बात स्पष्ट रूप से यहां वर्णित के रूप में एक साइट के प्रमाण पत्र की अनुमति देना है (विशेष रूप से यदि एक साइट का अपना सर्वर है और आपके पास पहले से ही .pem तक पहुंच है)।

# cp /your/site.pem /etc/pki/ca-trust/source/anchors/
# update-ca-trust extract

मैं इस सटीक SO त्रुटि में भाग रहा था, CentOS 6 पर PHP 5.6 में अपग्रेड करने के बाद सर्वर पर पहुंचने की कोशिश कर रहा था जिसमें एक चेसप्सलसिटी प्रमाण पत्र है, जिसे शायद इसे अपडेट करने की आवश्यकता थी, लेकिन इसके बजाय मैंने एक लेटेन्सक्रिप्ट प्रमाण पत्र स्थापित किया और इन दो चरणों के साथ यह किया। चाल। मुझे नहीं पता कि दूसरा कदम क्यों जरूरी था।


उपयोगी कमांड

खुलता है संस्करण देखें:

# openssl version
OpenSSL 1.0.1e-fips 11 Feb 2013

देखें PHP cli ssl वर्तमान सेटिंग्स:

# php -i | grep ssl
openssl
Openssl default config => /etc/pki/tls/openssl.cnf
openssl.cafile => no value => no value
openssl.capath => no value => no value

1

के समान त्रुटियों के संबंध में

[११-मई -२०१: १ ९ -१ ९: १३ अमेरिका / शिकागो] PHP चेतावनी: file_get_contents (): SSL ऑपरेशन १ कोड के साथ विफल हुआ। OpenSSL त्रुटि संदेश: त्रुटि: १४० ९ ०० :६: SSL दिनचर्या: ssl3_get_ser_certificate: प्रमाणपत्र सत्यापन विफल

क्या आपने ओपनसएल द्वारा संदर्भित प्रमाणपत्र और निर्देशिकाओं की अनुमतियों की जांच की है?

तुम यह केर सकते हो

var_dump(openssl_get_cert_locations());

इससे मिलता-जुलता कुछ पाने के लिए

array(8) {
  ["default_cert_file"]=>
  string(21) "/usr/lib/ssl/cert.pem"
  ["default_cert_file_env"]=>
  string(13) "SSL_CERT_FILE"
  ["default_cert_dir"]=>
  string(18) "/usr/lib/ssl/certs"
  ["default_cert_dir_env"]=>
  string(12) "SSL_CERT_DIR"
  ["default_private_dir"]=>
  string(20) "/usr/lib/ssl/private"
  ["default_default_cert_area"]=>
  string(12) "/usr/lib/ssl"
  ["ini_cafile"]=>
  string(0) ""
  ["ini_capath"]=>
  string(0) ""
}

इस मुद्दे ने मुझे थोड़ी देर के लिए निराश कर दिया, जब तक मुझे एहसास नहीं हुआ कि मेरे "सेर्ट्स" फ़ोल्डर में 700 अनुमतियाँ थीं, जब इसमें 755 अनुमतियाँ होनी चाहिए थीं। याद रखें, यह कुंजी के लिए फ़ोल्डर नहीं बल्कि प्रमाण पत्र है। मैं इस लिंक को ssl अनुमतियों पर पढ़ने की सलाह देता हूं

एक बार मैंने किया

chmod 755 certs

समस्या तय हो गई थी, कम से कम मेरे लिए वैसे भी।


वाह! CHMOD के रूप में अच्छी तरह से मेरा मुद्दा था ;-) धन्यवाद
आरए।

0

का उपयोग करते समय मैं एक सुरक्षित पृष्ठ के लिए एक ही मुद्दा था wgetया file_get_contents। बहुत सारे शोध (इस प्रश्न पर प्रतिक्रियाओं में से कुछ सहित) के परिणामस्वरूप एक सरल समाधान हुआ - कर्ल और पीएचपी-कर्ल को स्थापित करना - अगर मैं सही ढंग से समझ गया हूं, तो कर्ल को कोमोडो के लिए रूट सीए है जो इस मुद्दे को हल करता है

कर्ल और PHP-कर्ल एडऑन स्थापित करें, फिर अपाचे को पुनरारंभ करें

sudo apt-get install curl
sudo apt-get install php-curl
sudo /etc/init.d/apache2 reload

सभी अब काम कर रहे हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.