سؤال

قررت مؤخرًا إضافة خيار دفع BankLink لمتجر PHP الخاص بي وبعد قراءة مواصفات التنفيذ ، يبدو كل شيء Okey ، ولكن النقطة الأولى منه. جميع التبادل المفتاح العام (الشهادات) في شكل X509. الآن ماذا يعني ذلك الأخير وكيف يختلف عن ملف .pem المحمي بكلمة المرور العادية؟ أيضًا مع ملف .PEM المحمي بكلمة مرور منتظمة لا يمكنني استخدام وظيفة PHP مثل openssl_verify() موقعة من قبل openssl_sign() وظيفة.

هل يمكنني الحصول على بعض النصائح هنا من فضلك لأن البنك الذي يقدم طريقة الدفع هذه يحتوي على القليل من المعلومات حول هذا الأمر ، وأنا جديد تمامًا على هذا.

لذا فإن الروتين الذي أحتاج إلى القيام به هنا هو إنشاء طلب. قم بإرساله إليهم. بعد ذلك سوف يوقعون عليه أو أي شيء لا يمكنني أن أكون قادرًا عليه في استخدامه في طلبي.

من فضلك ، أخبرني ما إذا كانت معلوماتي ليست كافية لأنني كما قلت لا أعرف الكثير عندما يتعلق الأمر بالشهادات أو OpenSSL.

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

المحلول

يحتوي ملف PEM على شهادة "RAW" المشفرة والمعروفة بـ 64 ، لذلك يجب أن تعمل الوظائف التي تعمل مع PEM مع الشهادات الأولية. يجب أن يكون OpenSSL قادرًا على التحويل من تنسيق إلى آخر.

نصائح أخرى

عليك أن تستخدم curl مفهوم.

curl_setopt($ch, CURLOPT_SSLCERT,'CA.pem');

بصراحة ، قدرات OpenSSL في PHP هي سهلة. أفضل رهان لك هو الذهاب للحصول على حزمة رائعة مثل phpseclib.

منذ وقت طويل كنت أفعل شيئًا مشابهًا. الفرق هو أنهم أعطوني ملف PEM فقط ، واستخدمته للاتصال بخادمهم.

أدناه كتبت الخاص بي من أجلك. قون

  1. إنشاء myreq.pem باستخدام أداة OpenSSL.
  2. أرسل myreq.pem لهم واحصل على شهادة التوقيع CA.PEM.
  3. استخدم CA.PEM في PHP مثل أدناه.

 

$context = stream_context_create();
stream_context_set_option($context, 'ssl', 'verify_peer', false); //or can be true
stream_context_set_option($context, 'ssl', 'cafile', "ca.pem");
stream_context_set_option($context, 'ssl', 'local_cert', "ca.pem");
stream_context_set_option($context, 'ssl', 'passphrase', 'your pem file password');
//instead tls can be ssl, sslv3, sslv2 depending requirements, 10 is timeout
$sock = stream_socket_client("tls://host:port", $errno, $errstr, 10, STREAM_CLIENT_CONNECT, $context); 
fwrite($sock, "Hi server\r\n");
$strResponse;
while(!feof($sock)) { $strResponse = $strResponse . fgets($sock, 1024); }
fclose($s);
echo $strResponse;
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top