سؤال

الخطأ الذي يحصل عليه الكثير من الأشخاص مع مصادقة Facebook هو:

CurlException: 60: SSL certificate problem, verify that the CA cert is OK. Details: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

والمعلومات الوحيدة التي يمكنني العثور عليها حولها تشير إلى إضافة الأسطر التالية من التعليمات البرمجية إلى حليقة:

$opts[CURLOPT_SSL_VERIFYPEER] = false;
$opts[CURLOPT_SSL_VERIFYHOST] = 2;

أعرف أن هذا يعمل ، لكن ما الذي يحدث هنا؟ ليس هناك أي إعدادات خادم/configuraton يمكن تغييرها بدلاً من اختراق Facebook.php.

هل كانت مفيدة؟

المحلول

ماذا تفعل ومعنى:

يطلب الرمز التالي أن لا تتحقق من صحة شهادات الأمان. وبالتالي ، يختفي الخطأ.

  $opts[CURLOPT_SSL_VERIFYPEER] = false;
  $opts[CURLOPT_SSL_VERIFYHOST] = 2;

عندما تتصل بخادم بعيد مع SSL ، قد تكون شهادتها غير صالحة أو منتهية الصلاحية أو لم يتم توقيعها بواسطة CA معترف بها. يتفقد حليقة عادة.

curlopt_ssl_verifyhost:

  • 1: للتحقق من وجود اسم مشترك في شهادة نظير SSL.
  • 2: للتحقق من وجود اسم مشترك والتحقق أيضًا من أنه يتطابق مع اسم المضيف المقدم.

curlopt_ssl_verifypeer: كاذبة لمنع حليقة من التحقق من شهادة النظراء. يمكن تحديد شهادات بديلة للتحقق منها مع خيار Curlopt_cainfo أو يمكن تحديد دليل الشهادة مع CURLOPT_CAPATH اختيار. قد تحتاج Curlopt_SSL_VerifyHost أيضًا إلى أن تكون صحيحة أو خاطئة إذا تم تعطيل Curlopt_SSL_VerifyPeer (إنه افتراضي إلى 2).


كيفية تمكين والتحقق بشكل صحيح:

للتحقق بشكل صحيح ، نحتاج إلى التحقق من أن الشهادة التي يتم تقديمها إلينا مفيدة للواقع. نحن نفعل هذا من خلال مقارنته مع شهادة نحن معقولة* الثقة.

إذا كان المورد البعيد محميًا بشهادة صادرة عن واحدة من CA الرئيسية مثل Verisign ، Geotrust et al ، يمكنك المقارنة بأمان مقابل حزمة شهادة CA Mozilla والتي يمكنك الحصول عليها http://curl.haxx.se/docs/caextract.html

احفظ الملف cacert.pem في مكان ما في الخادم الخاص بك وقم بتعيين الخيارات التالية في البرنامج النصي الخاص بك.

curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, TRUE); 
curl_setopt ($ch, CURLOPT_CAINFO, "pathto/cacert.pem");

إذا كنت تتصل بمورد محمي بواسطة شهادة موقعة ذاتيًا ، فكل ما عليك فعله هو الحصول على نسخة من الشهادة بتنسيق PEM وإلحاقها بـ cacert.pem من الفقرة أعلاه.

نصائح أخرى

في حالتي ، لم أتمكن من استخدام Curl_setopt ، لأنني لم أتمكن من تحرير فصول API على Facebook (شروط المشروع التي كنت أعمل فيها).

لقد قمت بحل المشكلة عن طريق إضافة مسار إلى cacert.pem تم تنزيله من http://curl.haxx.se/docs/caextract.html إلى php.ini

[curl]
curl.cainfo = "c:\wamp\cacert.pem"

لقد واجهت نفس المشكلة ، وتعطيل التحقق من الأقران غير مقبول في حالتي. لقد قمت بتحديث ملف fa_ca_chain_bundle.crt (من gitbub facebook) وهو يعمل الآن.

التحيات ، ماريك

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top