У меня есть php-скрипт, который ищет каталог openssl и шифрует данные клиентов, которые у меня есть.
Когда я загружаю скрипт в свой онлайн-каталог Linux, шифрование работает нормально.
#private key file to use
$MY_KEY_FILE = "my-prvkey.pem";
#public certificate file to use
$MY_CERT_FILE = "my-pubcert.pem";
# Paypal's public certificate
$PAYPAL_CERT_FILE = "paypal_cert_sandbox.pem";
# path to the openssl binary
$OPENSSL = "/usr/bin/openssl";
Когда я пытаюсь запустить ту же команду на своем компьютере с Windows, на котором в настоящее время работает XAMPP, я не могу ничего зашифровать. У кого-нибудь еще была эта проблема?
Я бы НАМНОГО скорее обновлял и тестировал локально, чем каждый раз, когда я вношу изменения во время нашей сборки, загружаю файл по ftp.
РЕДАКТИРОВАТЬ
Я понимаю, что указанный выше каталог в основном предназначен для Linux; однако, даже когда я указываю каталог на каталог openssl в папке XAMPP (для меня: C:\xampp\apache\bin), операция завершается ошибкой.
РЕДАКТИРОВАТЬ 2
Когда я говорю «невозможно зашифровать», я имею в виду, что НИЧЕГО не возвращается (т. е. открытые ключи явно не находят файлы openssl .dll), даже если они указывают на правильный каталог. Сообщений об ошибках нет. Различия в конфигурации? Один сервер Linux, другой локальный компьютер Windows.
В свой сценарий я включаю следующее:
<?php
function paypal_encrypt($hash) {
global $MY_KEY_FILE;
global $MY_CERT_FILE;
global $PAYPAL_CERT_FILE;
global $OPENSSL;
if (!file_exists($MY_KEY_FILE)) {
echo "ERROR: MY_KEY_FILE $MY_KEY_FILE not found\n"; }
if (!file_exists($MY_CERT_FILE)) {
echo "ERROR: MY_CERT_FILE $MY_CERT_FILE not found\n"; }
if (!file_exists($PAYPAL_CERT_FILE)) {
echo "ERROR: PAYPAL_CERT_FILE $PAYPAL_CERT_FILE not found\n"; }
if (!file_exists($OPENSSL)) {
echo "ERROR: OPENSSL $OPENSSL not found\n"; }
$openssl_cmd = "$OPENSSL smime -sign -signer $MY_CERT_FILE -inkey $MY_KEY_FILE " . "-outform der -nodetach -binary | $OPENSSL smime -encrypt " . "-des3 -binary -outform pem $PAYPAL_CERT_FILE";
$descriptors = array( 0 => array("pipe", "r"), 1 => array("pipe", "w"), );
$process = proc_open($openssl_cmd, $descriptors, $pipes);
if (is_resource($process)) {
foreach ($hash as $key => $value) {
if ($value != "") {
fwrite($pipes[0], "$key=$value\n");
}
}
fflush($pipes[0]);
fclose($pipes[0]);
$output = "";
while (!feof($pipes[1])) {
$output .= fgets($pipes[1]); }
fclose($pipes[1]);
$return_value = proc_close($process);
return $output;
}
return "ERROR"; }
?>
На моем компьютере с Windows И компьютере с Linux отображается «Ошибка: OPENSSL не найден» (хотя на сервере с Linux шифрование все равно завершается). Я могу удалить строку на своем компьютере с Windows, просто поместив C:\xampp\apache\bin\openssl.exe, но это все равно не шифрует).