Разработка Paypal. шифровать транзакции. php p12

когда я смотрю документацию по PayPal, они говорят: «Обратите внимание, что SDK PayPal для PHP не требует шифрования SSL». https://developer.paypal.com/docs/classic/api/apiCredentials/#encrypting-your-certificate

Является ли утверждение этой фразы, что мне не нужно создавать сертификат p12 при работе с php, но используйте public_key.pem и paypal_public_key.pem ?

Если да: безопасно ли это для создания элементов ввода зашифрованной формы без сертификата p12?

Если нет: что они означают? 🙂

Прежде чем этот вопрос возник, я протестировал эту небольшую программу. http://www.softarea51.com/blog/how-to-integrate-your-custom-shopping-cart-with-paypal-website-payments-standard-using-php/

Существует файл конфигурации paypal-wps-config.inc.php где я могу определить пути к моим сертификатам.

  // tryed to use // 'paypal_cert.p12 '; $config['private_key_path'] = '/home/folder/.cert/pp/prvkey.pem'; // must match the one you set when you created the private key $config['private_key_password'] = ''; //'my_password'; 

Когда я пытаюсь использовать сертификат openssl_error_string() , openssl_error_string() возвращает «Не удалось подписать данные: ошибка: 0906D06C: подпрограммы PEM: PEM_read_bio: нет стартовой строки openssl_pkcs7_sign

Когда я вместо этого использую prvkey.pem без пароля, все работает нормально.

Вот функция, которая подписывает и шифрует данные.

  function signAndEncrypt($dataStr_, $ewpCertPath_, $ewpPrivateKeyPath_, $ewpPrivateKeyPwd_, $paypalCertPath_) { $dataStrFile = realpath(tempnam('/tmp', 'pp_')); $fd = fopen($dataStrFile, 'w'); if(!$fd) { $error = "Could not open temporary file $dataStrFile."; return array("status" => false, "error_msg" => $error, "error_no" => 0); } fwrite($fd, $dataStr_); fclose($fd); $signedDataFile = realpath(tempnam('/tmp', 'pp_')); **// here the error came from** if(!@openssl_pkcs7_sign( $dataStrFile, $signedDataFile, "file://$ewpCertPath_", array("file://$ewpPrivateKeyPath_", $ewpPrivateKeyPwd_), array(), PKCS7_BINARY)) { unlink($dataStrFile); unlink($signedDataFile); $error = "Could not sign data: ".openssl_error_string(); return array("status" => false, "error_msg" => $error, "error_no" => 0); } unlink($dataStrFile); $signedData = file_get_contents($signedDataFile); $signedDataArray = explode("\n\n", $signedData); $signedData = $signedDataArray[1]; $signedData = base64_decode($signedData); unlink($signedDataFile); $decodedSignedDataFile = realpath(tempnam('/tmp', 'pp_')); $fd = fopen($decodedSignedDataFile, 'w'); if(!$fd) { $error = "Could not open temporary file $decodedSignedDataFile."; return array("status" => false, "error_msg" => $error, "error_no" => 0); } fwrite($fd, $signedData); fclose($fd); $encryptedDataFile = realpath(tempnam('/tmp', 'pp_')); if(!@openssl_pkcs7_encrypt( $decodedSignedDataFile, $encryptedDataFile, file_get_contents($paypalCertPath_), array(), PKCS7_BINARY)) { unlink($decodedSignedDataFile); unlink($encryptedDataFile); $error = "Could not encrypt data: ".openssl_error_string(); return array("status" => false, "error_msg" => $error, "error_no" => 0); } unlink($decodedSignedDataFile); $encryptedData = file_get_contents($encryptedDataFile); if(!$encryptedData) { $error = "Encryption and signature of data failed."; return array("status" => false, "error_msg" => $error, "error_no" => 0); } unlink($encryptedDataFile); $encryptedDataArray = explode("\n\n", $encryptedData); $encryptedData = trim(str_replace("\n", '', $encryptedDataArray[1])); return array("status" => true, "encryptedData" => $encryptedData); } // signAndEncrypt } // PPCrypto 

Основные вопросы:

  1. Можно ли использовать p12 cert с php, или он достаточно безопасен для работы без него?

  2. Почему я становлюсь ошибкой при использовании openssl_pkcs7_sign

Пожалуйста помоги.

Приветствия ninchen

Не следует путать «использование SSL» с «использованием SSL с предопределенным сертификатом клиента». Документ, на который вы ссылаетесь, описывает последнее. Простое обращение к URL-адресу https позволит включить SSL и обеспечить безопасность, эквивалентную браузерам. Это делается с помощью SDK автоматически.

Предопределенные клиентские сертификаты защищают от сложного злоумышленника, выполняющего атаку «человек в середине». Оба метода заставят неискушенного злоумышленника прямо читать сетевой трафик.

Сертификаты клиентов также служат для аутентификации вас в PayPal в качестве альтернативы для пользователя / пароля / подписи.