لا اختراق Curlexception: 60 (التحقق من شهادة Curl SSL)
-
30-09-2019 - |
سؤال
الخطأ الذي يحصل عليه الكثير من الأشخاص مع مصادقة 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) وهو يعمل الآن.
التحيات ، ماريك