когда я смотрю документацию по 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
Основные вопросы:
Можно ли использовать p12 cert с php, или он достаточно безопасен для работы без него?
Почему я становлюсь ошибкой при использовании openssl_pkcs7_sign
Пожалуйста помоги.
Приветствия ninchen
Не следует путать «использование SSL» с «использованием SSL с предопределенным сертификатом клиента». Документ, на который вы ссылаетесь, описывает последнее. Простое обращение к URL-адресу https
позволит включить SSL и обеспечить безопасность, эквивалентную браузерам. Это делается с помощью SDK автоматически.
Предопределенные клиентские сертификаты защищают от сложного злоумышленника, выполняющего атаку «человек в середине». Оба метода заставят неискушенного злоумышленника прямо читать сетевой трафик.
Сертификаты клиентов также служат для аутентификации вас в PayPal в качестве альтернативы для пользователя / пароля / подписи.