Каталог OpenSSL нормально на сервере Linux - не на Windows XAMPP - PullRequest
0 голосов
/ 28 сентября 2010

У меня есть 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 файл.

РЕДАКТИРОВАТЬ

Iпонять, что каталог выше в основном для 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, но это все равно не выполняет никакого шифрования).

1 Ответ

1 голос
/ 28 сентября 2010

При добавлении пути Windows в ваш скрипт не забывайте избегать обратной косой черты, иначе он будет интерпретироваться как escape-символы. Вы можете использовать косую черту в 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

...