Каталог OpenSSL отлично работает на сервере Linux, а не в Windows XAMPP

У меня есть 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, но это все равно не шифрует).


person JM4    schedule 27.09.2010    source источник
comment
Что означает невозможность шифрования? Вы просто получаете исходный открытый текст? Вы получаете мусор? Вы искали сообщения об ошибках? Вы проверили различия в конфигурации? Может ли ваш XAMPP найти файлы opensll .dll? Ваш веб-сервер может их прочитать? Вы не даете достаточно подробностей, чтобы помочь.   -  person Marc B    schedule 28.09.2010


Ответы (1)


При указании пути Windows в вашем скрипте не забудьте экранировать обратную косую черту, иначе он будет интерпретирован как экранирующий символ. Вы можете использовать косую черту в PHP для Windows.

Два способа указания пути openssl в Windows:

$OPENSSL = 'C:\\xampp\\apache\\bin\\openssl.exe';
$OPENSSL = 'C:/xampp/apache/bin/openssl.exe';

PHP также имеет расширение для OpenSSL: http://php.net/manual/en/book.openssl.php

person Lekensteyn    schedule 28.09.2010
comment
пробовал и раньше и безрезультатно. По какой-то причине по-прежнему ничего не шифруется - никаких ошибок в журналах или на сайте. - person JM4; 28.09.2010