file_get_contents (): এসএসএল অপারেশন কোড 1 সহ ব্যর্থ হয়েছে, ক্রিপ্টো সক্ষম করতে ব্যর্থ হয়েছে


187

আমি আমাদের সার্ভারে তৈরি করা একটি পিএইচপি পৃষ্ঠা থেকে এই বিশেষ REST পরিষেবাটি অ্যাক্সেস করার চেষ্টা করছি। আমি এই দুটি লাইনে সমস্যা সঙ্কুচিত করেছি। সুতরাং আমার পিএইচপি পৃষ্ঠাটি দেখতে এমন দেখাচ্ছে:

<?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 এ মারা যায়:

  • সতর্কতা: ফাইল_জেট_কন্টেন্টস (): কোড 1 দিয়ে এসএসএল অপারেশন ব্যর্থ হয়েছে Open
    • সতর্কতা: ফাইল_জেট_কন্টেন্টস (): লাইন 2 তে ... পিএইচপি ইন ক্রিপ্টো সক্ষম করতে ব্যর্থ
    • সতর্কতা: ফাইল_জেট_কন্টেন্টস ( 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 এ পিএইচপি

আমরা একটি জেন্টু সার্ভার ব্যবহার করছি। আমরা সম্প্রতি পিএইচপি সংস্করণ 5.6 এ আপগ্রেড করেছি। এটি আপগ্রেডের পরে যখন এই সমস্যাটি উপস্থিত হয়েছিল।

আমি খুঁজে পেয়েছি যখন আমি একটি ঠিকানার মতো আরআরইএসটি পরিষেবাটি প্রতিস্থাপন করি https://www.google.com; আমার পৃষ্ঠা ঠিক কাজ করে।

পূর্বের একটি প্রয়াসে আমি সেট করেছি “verify_peer”=>falseএবং ফাইল_জেট_কন্টেন্টস হিসাবে এখানে বর্ণিত হিসাবে আর্গুমেন্ট হিসাবে এটি পাস করেছি: ফাইল_জেট_কন্টেন্টগুলি যাচাই_পিয়ার => মিথ্যা উপেক্ষা করে? তবে লেখক যেমন উল্লেখ করেছেন; এটি কোন পার্থক্য তৈরি।

আমি আমাদের সার্ভার প্রশাসকদের একজনকে জিজ্ঞাসা করেছি যদি আমাদের php.ini ফাইলের এই লাইনগুলি বিদ্যমান থাকে:

  • এক্সটেনশন = php_openssl.dll
  • অনুমতি_url_fopen = চালু

তিনি আমাকে বলেছিলেন যেহেতু আমরা জেন্টুতে আছি, আমরা যখন নির্মাণ করি তখন ওপেনসেল সংকলিত হয়; এবং এটি php.ini ফাইলে সেট করা নেই।

আমিও নিশ্চিত হয়েছি যে allow_url_fopenকাজ করছে। এই সমস্যার বিশেষ প্রকৃতির কারণে; আমি সাহায্যের জন্য প্রচুর তথ্য খুঁজে পাচ্ছি না। আপনারা কেউ কি এরকম কিছু পেয়েছেন? ধন্যবাদ।


: আপনি ক্যাসপারস্কি ব্যবহার করেন তবে এই পরীক্ষা stackoverflow.com/a/54791481/3549317
cespon

উত্তর:


341

এটি সন্ধানের জন্য একটি বিরাট সহায়ক লিঙ্ক ছিল:

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

পিএইচপি ৫. in-তে এসএসএল খোলার পরিবর্তনগুলি বর্ণনা করে এমন একটি অফিসিয়াল ডকুমেন্ট, এখান থেকে আমি আরও একটি প্যারামিটার শিখেছি আমার মিথ্যাতে সেট করা উচিত ছিল: "যাচাই_পিয়র_নাম" => মিথ্যা

নোট: এই আছে খুব গুরুত্বপূর্ণ নিরাপত্তা প্রভাব। যাচাইকরণ অক্ষম করার ফলে একটি এমআইটিএম আক্রমণকারীকে অনুরোধের ফাঁকে ফাঁকে ফাঁকে একটি অবৈধ শংসাপত্র ব্যবহার করার অনুমতি দেয় । স্থানীয় বিকাশে এটি করতে দরকারী হতে পারে, তবে অন্যান্য পদ্ধতির উত্পাদনে ব্যবহার করা উচিত।

সুতরাং আমার ওয়ার্কিং কোডটি দেখে মনে হচ্ছে:

<?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
এটি এসএসএল শংসাপত্র ভঙ্গ করে এবং এটি একটি সুরক্ষা গর্ত
হাইপারি

8
@ হাইপাইরি টেক যেমন নির্দেশ করেছেন, আপনার কেবল যাচাইকরণ অক্ষম করা উচিত নয়। বিকল্প সমাধানের জন্য আমার উত্তরটি দেখুন যা এসএসএল ব্যবহারের উদ্দেশ্যকে পরাস্ত করে না।
এলিটেকিফ 21

4
এটি সত্যিই করা উচিত নয়। ইস্যুটি পার্শ্ব-পদক্ষেপের চেয়ে আপনার আসলে এটি ঠিক করা উচিত। @ এলিটেকিফ 21 থেকে আরও ভাল সমাধান দেখুন।
জ্যাস্পার

5
আপনি যদি কোনও এপিআইয়ের বিরুদ্ধে স্থানীয় পরিবেশ থেকে পরীক্ষা করে নিচ্ছেন তবে হতাশার কারণ হতে পারে। এক্ষেত্রে আমি সাধারণত যাচাইয়ের বিষয়টি নাক করে থাকি।
হ্যাপি কোডার 30'15

12
যেহেতু আমি যখনই এটি করার চেষ্টা করি আমি সর্বদা এখানে আসি, তাই অনুলিপি এবং অনুলিপি করার জন্য এখানে কোডটি দেওয়া হয়েছে:file_get_contents($url, false, stream_context_create(array('ssl' => array('verify_peer' => false, 'verify_peer_name' => false))));
লরেন্ট

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 ফাইলটি কোথা থেকে এসেছে? কার্ল ওয়েবসাইটে কোনও লিঙ্ক নেই যা আপনি সরবরাহ করেছেন এটিতে কেবল পেইম রয়েছে।
ve

1
পেম ফাইলটি একই হওয়া উচিত। এই পোস্ট করার সময়, তাদের সাইটে শংসাপত্রের বান্ডিলের দুটি সংস্করণ ছিল, একটি পেম এবং একটি ক্র্ট এবং আমি স্রেফ আমার উদাহরণের জন্য crt ফাইলটি ব্যবহার করেছি (স্বাভাবিকভাবেই এটি তারা মুছে ফেলবে)। ভবিষ্যতের রেফারেন্সের জন্য, crt ফাইলগুলি সাধারণত পেম ফাইলগুলির নাম পরিবর্তন করা হয়, এটি নামকরণ করা হয় যাতে উইন্ডোজ ফাইলটিকে একটি শংসাপত্রের ফাইল হিসাবে স্বীকৃতি দেয়। এটি সর্বদা ক্ষেত্রে হবে না, তবে এটি এই ক্ষেত্রে হয়। আমি আমার উদাহরণটি আপডেট করব যাতে এটি কার্ল সাইটে বর্তমানে পেম ফাইলটি ব্যবহার করে
elitechief 21

4
একটি সহায়ক ফাংশন রয়েছে stream_context_set_defaultযা ব্যবহার করা যেতে পারে যাতে আপনি এটি ফাইল-বিট_কন্টেন্টসগুলিতে প্রতিবার প্রবেশ করতে পারবেন না
কেন কোচ

কেউ কি কখনও এই কাজ করতে পেয়েছেন? আমি এই উত্তরের সাথে সংযুক্ত cacert.pem বান্ডিলটি দিয়ে, এবং কমোডো সিএ রুট শংসাপত্রের সাথেও চেষ্টা করেছি (যা আমি যাচাই করতে চাই তার শংসাপত্রের সিএ রুট) তবে এটি সর্বদা ব্যর্থ হবে।
zmippie

1
সুরক্ষা দৃষ্টিকোণ থেকে: ক্যাফিল স্ট্রিম প্রসঙ্গের বিকল্পের ব্যবহারের পরে, সিফার স্ট্রিম প্রসঙ্গ বিকল্পের মধ্যে অনুমোদিত সাইফারগুলি সংজ্ঞায়িত করা এবং যেসব এসএসএল সংস্করণগুলি দুর্বল বলে পরিচিত তা নিষিদ্ধ করা খুব গুরুত্বপূর্ণ হতে পারে। এছাড়াও স্ট্রিম প্রসঙ্গ বিকল্পটি সেট করা অক্ষম করুন / সংক্ষেপণটিকে সত্য রূপে সিআরআইএম আক্রমণ ভেক্টরকে প্রশমিত করার পরামর্শ দেওয়া হয়।
জোসেফ গ্লাতজ

36

আমি ওপেনএসএসএলটি আমার মেশিনে ইনস্টল করা আছে কিনা তা নিশ্চিত করে এবং তারপরে এটি আমার php.ini এ যুক্ত করে এটি ঠিক করেছি:

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

@ আখি আপনি গুগল করে রাখলে আপনার কয়েকটি টিউটোরিয়াল সন্ধান করা উচিত
অ্যান্ডলিন

2
আমি আইআইএস এ পিএইচপি 7 ব্যবহার করে একই পদ্ধতি ব্যবহার করেছি, cert.pemফাইলটি ডাউনলোড করে php.iniএইরকম সেট করেছি এবং এটি কাজ করেছে:openssl.cafile=D:\Tools\GnuWin32\bin\cacert.pem
ডেভিড রেফুয়া

1
আমি curl.haxx.se/docs/caextract.html থেকে পিইএম ফাইল ডাউনলোড করেছি - একটি নির্দিষ্ট জিস্ট্যাটিক.কম ইউআরএল দিয়ে উইন্ডোজটিতে আমার জন্য সমস্যাটি স্থির করে।
জেক

কার্ল.হএক্স.এক্সএক্স.সি / ডকস / সিএেক্সট্র্যাক্ট.এইচটিএমএল থেকে পিইএম ফাইল ডাউনলোড করা সেন্টোস on এ আমার পক্ষে কাজ করেনি I সঠিক উত্তর এবং দিকনির্দেশের জন্য +1।
অরবিন্দ কে।

কোনও বান্ডিল তৈরি করার সময় প্রধান সার্টিফিকেশনে সিদ্ধান্ত নেওয়ার আগে পিকেসিএসকে পেম ফাইলে রূপান্তর করতে ভুলবেন না
অরবিন্দ কে।

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;

}

তারপরে আপনি যখনই কোনও ইউআরএল কল করছেন তখনই file_get_contents_curlপরিবর্তে ব্যবহার করুন file_get_contentsযা https থেকে শুরু হয়।


এটি আমার পক্ষে কাজ করেছে। দুর্দান্ত কাজ এবং আপনাকে ধন্যবাদ!
নিক গ্রিন

12

আমার জন্য কাজ করে, আমি পিএইচপি 5.6 ব্যবহার করছি। ওপেনএসএল এক্সটেনশন সক্ষম করা উচিত এবং গুগল ম্যাপকে কল করার সময় এপিআই যাচাই_পিয়ার মিথ্যা তৈরি করুন নীচের কোডটি আমার জন্য কাজ করছে।

<?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

যদি আপনার পিএইচপি সংস্করণটি 5 হয় তবে টার্মিনালে নিম্নলিখিত কমান্ডটি লিখে সিআরএল ইনস্টল করার চেষ্টা করুন:

sudo apt-get install php5-curl

9
এর সাথে পুরোপুরি কিছুই করার নেই cURL
Andreas

2
পিএইচপি কার্ল ইনস্টল করা সঠিক উত্তর হওয়া উচিত! আমার ম্যাক সিস্টেমের জন্য, আমি বন্দরটি ব্যবহার করছি এবং কমান্ডটি হ'ল:sudo port install php70-curl

8

নীচের লিঙ্কটি থেকে ডাউনলোড করা এসএসএল-শংসাপত্রের পিইএম ফাইলের পথে আপনাকে মূলত পরিবেশ পরিবর্তনশীল SSL_CERT_FILE সেট করতে হবে: http://curl.haxx.se/ca/cacert.pem

এটি বের করতে আমার অনেক সময় লেগেছে।


লিঙ্কটি কাজ করে নি, তবে আমি এটি দেখতে পেয়েছি এটি একই: akrabat.com/ssl-certificate-verifications-on-php-5-6
ড্যানিয়েল পি

6

নীচের পদক্ষেপগুলি অনুসরণ করা এই সমস্যাটিকে ঠিক করবে,

  1. এই লিঙ্কটি থেকে সিএ শংসাপত্র ডাউনলোড করুন: 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. এটি কাজ করে!

আশা করি এইটি কাজ করবে !!


এটা কি নিরাপদ? আমি সহজ সমাধানগুলি পছন্দ করি তবে আমি এখানে কিছু তথ্য অনুপস্থিত ...
সুইসউইস

পরীক্ষার জন্য ঠিক আছে
জিওমরিলো

5

আমি কেবল এটিকে যুক্ত করতে চেয়েছিলাম যেহেতু আমি একই সমস্যায় পড়েছিলাম এবং আমি কোথাও খুঁজে পাচ্ছিলাম না এমন কিছুই কাজ করবে না (যেমন, cacert.pem ফাইলটি ডাউনলোড করা, php.ini তে ক্যাফিল স্থাপন করা ইত্যাদি))

আপনি যদি এনজিআইএনএক্স ব্যবহার করছেন এবং আপনার এসএসএল শংসাপত্রটি একটি "মধ্যবর্তী শংসাপত্র" নিয়ে আসে, আপনার মধ্যবর্তী সার্টিফিকেটটি আপনার মূল "mydomain.com.crt" ফাইলের সাথে একত্রিত করতে হবে এবং এটি কাজ করা উচিত। মধ্যবর্তী শংসাপত্রগুলির জন্য অ্যাপাচে নির্দিষ্ট একটি সেটিং রয়েছে, তবে এনজিআইএনএক্স এটি করে না তাই এটি আপনার নিয়মিত শংসাপত্রের মতোই একই ফাইলে থাকতে হবে।


4

এই ত্রুটির কারণ পিএইচপি-র বিশ্বস্ত শংসাপত্র কর্তৃপক্ষের একটি তালিকা নেই।

পিএইচপি 5.6 এবং পরে স্বয়ংক্রিয়ভাবে সিস্টেম দ্বারা বিশ্বাসযোগ্য সিএগুলি লোড করার চেষ্টা করুন। যে সমস্যাগুলি স্থির করা যেতে পারে। আরও তথ্যের জন্য http://php.net/manual/en/migration56.openssl.php দেখুন ।

পিএইচপি 5.5 এবং তার আগে হয় সত্যিই সেটআপ কঠিন সঠিকভাবে যেহেতু আপনি নিজে প্রতিটি অনুরোধের প্রেক্ষাপটে সিএ বান্ডিল, একটা জিনিস আপনি আপনার কোড চারপাশের ছিটিয়ে চাই না নির্দিষ্ট করতে হবে। সুতরাং আমি আমার কোডটির জন্য স্থির করেছি যে পিএইচপি সংস্করণ <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);
}

এটি আমার সমস্যা খুঁজে পেতে আমাকে সহায়তা করেছিল। যদিও আমি পিএইচপি 5.6 এ আছি তবুও আমি একটি পুরানো এপিআই ক্লায়েন্ট লাইব্রেরি ব্যবহার করছিলাম যা উপরের আপনার লিঙ্ক অনুসারে ক্যাফিল প্রসঙ্গ বিকল্পটি ব্যবহার করে ম্যানুয়ালি একটি পুরানো সিএ ফাইলটি নির্দিষ্ট করেছে। এপিআই ক্লায়েন্ট লাইব্রেরি থেকে এটি অপসারণ এটি আমার জন্য স্থির করে। সম্ভবত পিএইচপি ওপেনএসএসএল বিশ্বস্ত বান্ডিল ব্যবহার শুরু করেছে
জো লিপসন

4

এক্সএএমপিপি এবং ওএসএক্সে পিএইচপি 7 এর সাথে একই ত্রুটি ছিল।

Https://stackoverflow.com/ এ উল্লিখিত উত্তরটি ভাল, তবে এটি আমার জন্য সমস্যার সম্পূর্ণ সমাধান করেনি। ফাইল_জেট_কন্টেন্টস () আবার কাজ করতে আমাকে সম্পূর্ণ শংসাপত্র শৃঙ্খলা সরবরাহ করতে হয়েছিল। এটি আমি এটি করেছিলাম:

রুট / মধ্যবর্তী শংসাপত্র পান

প্রথমে আমাকে মূল এবং মধ্যবর্তী শংসাপত্রটি কী তা খুঁজে বের করতে হয়েছিল ।

সর্বাধিক সুবিধাজনক উপায় হ'ল এসএসএল-ক্রেতার মতো একটি অনলাইন শংসাপত্র-সরঞ্জাম

সেখানে আমি তিনটি শংসাপত্র পেয়েছি, একটি সার্ভার-শংসাপত্র এবং দুটি চেইন-শংসাপত্র (একটি হ'ল মূল, অন্যটি আন্তঃস্থায়ী)

আমাকে যা করতে হবে তা হল কেবল তাদের উভয়ের জন্য ইন্টারনেট অনুসন্ধান করা। আমার ক্ষেত্রে এটিই মূল:

thavte ডিভি এসএসএল SHA256 সিএ

এবং এটি তার url thawte.com এ নিয়ে যায় । সুতরাং আমি কেবল এই পাঠ্যপুস্তকে এই শংসাপত্রটি রেখেছি এবং মধ্যবর্তী ক্ষেত্রেও এটি করেছি। সম্পন্ন.

হোস্ট শংসাপত্র পান

আমার পরবর্তী জিনিসটি হ'ল আমার সার্ভারের শংসাপত্রটি ডাউনলোড করা। লিনাক্স বা ওএস এক্স এ এটি ওপেনসেল দিয়ে করা যেতে পারে:

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

পিএইচপি বলুন চেইনটি কোথায় পাবেন

এই কার্যক্ষম ফাংশনটি ওপেনসেল_জেট_সেসার্ট_লোকেশনস () রয়েছে যা আপনাকে জানাবে যে, পিএইচপি যেখানে সার্ট ফাইলগুলি সন্ধান করছে। এবং এই প্যারামিটারটি রয়েছে, যা ফাইল_জেট_কন্টেন্টস () বলবে যে কোথায় সার্টিফাইট ফাইলগুলি সন্ধান করতে হবে। সম্ভবত উভয় উপায় কাজ করবে। আমি প্যারামিটার উপায় পছন্দ। (উপরে বর্ণিত সমাধানের তুলনায়)।

সুতরাং এটি এখন আমার পিএইচপি-কোড

$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 () আবার কাজ করছে। সিআরএল ছাড়া এবং আশা করি সুরক্ষা ত্রুটিগুলি ছাড়াই।


ফাইল chain.pemকি? এটা কি chain.crt?
ড.এক্সএক্স

এটি চেইন সিআরটি নয়, এটি আসল শংসাপত্রের জন্য। এটি যদি অন্তর্বর্তী শংসাপত্র, ওরফে শংসাপত্র শৃঙ্খলা তালিকা। আপনার অগত্যা এটির দরকার নেই। আপনার প্রয়োজন কিনা তা জানতে একটি এসএসএল সার্টি পরীক্ষক ব্যবহার করুন। যদি তা হয় তবে আপনি সঠিকভাবে সন্ধান করতে আপনার শংসাপত্র প্রদানকারীকে + শব্দ "চেইন" বা "মধ্যবর্তী" শব্দটি অনুসন্ধান করতে পারেন।
এনআর

4

পিএইচপি পিএইচপি 5 কে আপডেট করার পরে সেন্টোস-এ এই সমস্যার শিকার হওয়ার পরে আমি একটি সমাধান খুঁজে পেয়েছি যা আমার পক্ষে কাজ করে।

এটির সাথে ডিফল্টরূপে আপনার শংসাপত্রগুলি স্থাপনের জন্য সঠিক ডিরেক্টরিটি পান

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

তারপরে শংসাপত্রটি পেতে এটি ব্যবহার করুন এবং উপরের কোড থেকে পাওয়া ডিফল্ট লোকেশনটিতে রেখে দিন

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

3

আমার বিকাশকারী মেশিনে (পিএইচপি,, উইন্ডোজে এক্সএএমপি) একই রকম এসএসএল-সমস্যা ছিল একটি " https: // লোকালহস্ট / ..." - ফাইলটি ফোকেন করার চেষ্টা করে স্ব স্বাক্ষরিত শংসাপত্রের সাথে । স্পষ্টতই রুট-শংসাপত্র-সমাবেশ (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

আমি CentOS 6 এ পিএইচপি 5.6-তে আপগ্রেড করার পরে এই সঠিক এসও ত্রুটির মধ্যে দিয়ে যাচ্ছিলাম যা নিজেই একটি সাস্টস্লসিকিউরিটি শংসাপত্র রয়েছে যা সম্ভবত এটি আপডেট করার দরকার ছিল, তবে পরিবর্তে আমি একটি লেসনক্রিপ্ট সার্টিফিকেট ইনস্টল করেছি এবং উপরে এই দুটি পদক্ষেপ নিয়ে এটি করেছি শিল্প খাত. দ্বিতীয় ধাপটি কেন প্রয়োজনীয় ছিল তা আমি জানি না।


দরকারী কমান্ড

ওপেনসেল সংস্করণ দেখুন:

# openssl version
OpenSSL 1.0.1e-fips 11 Feb 2013

পিএইচপি ক্লাইট এসএসএল বর্তমান সেটিংস দেখুন:

# 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

অনুরূপ ত্রুটি সম্পর্কিত

[11-মে-2017 19:19:13 আমেরিকা / শিকাগো] পিএইচপি সতর্কতা: ফাইল_জেট_কন্টেন্টস (): কোড 1 দিয়ে এসএসএল অপারেশন ব্যর্থ হয়েছে।

আপনি ওপেনএসএল দ্বারা রেফারেন্স প্রাপ্ত সার্টিফিকেট এবং ডিরেক্টরিগুলির অনুমতি পরীক্ষা করেছেন?

তুমি এটি করতে পারো

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 অনুমতি থাকা উচিত ছিল। মনে রাখবেন, এটি কীগুলির জন্য নয় তবে শংসাপত্রগুলির ফোল্ডার। আমি এটি পড়ার পরামর্শ দিচ্ছি এই লিঙ্কটি এসএসএল অনুমতিতে ।

একবার করেছিলাম

chmod 755 certs

সমস্যাটি স্থির ছিল, কমপক্ষে আমার পক্ষে যাই হোক।


হ্যাঁ! CHMOD আমার সমস্যাও ছিল ;-) ধন্যবাদ
আরএ

0

ব্যবহার করার সময় wgetবা অন্য সুরক্ষিত পৃষ্ঠার জন্য আমার একই সমস্যা ছিল file_get_contents। প্রচুর গবেষণা (এই প্রশ্নে কিছু প্রতিক্রিয়া সহ) একটি সহজ সমাধানের ফলস্বরূপ - কার্ল এবং পিএইচপি-কার্ল ইনস্টল করা - যদি আমি সঠিকভাবে বুঝতে পারি তবে কার্লের কমোডোর জন্য রুট সিএ রয়েছে যা সমস্যার সমাধান করেছে which

কার্ল এবং পিএইচপি-কার্ল অ্যাডন ইনস্টল করুন, তারপরে অ্যাপাচি পুনরায় চালু করুন

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

সব এখন কাজ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.