PHP Encryption openssl_pkcs7_encrypt () не работает - PullRequest
1 голос
/ 03 февраля 2009

У меня есть этот код:

 $fp = fopen($unenc_path, "w");
 fwrite($fp, $msg);
 fclose($fp);

 $easy_access_emails = 'person@##.com';
 $headers =   "From: support@##.com <support@##.com>\n" . 
              "Reply-to: support@##.com\n" . 
              "Subject: " . $subject . "\n";

 $key = implode("", file("../newcert.pem"));

 $ArrayMessageProperties = explode("\n", $headers);

 $unenc_path = '..\\tmp\\'. preg_replace('/[^0-9]/','', microtime()) . rand(0,1000) . "msg.txt";
 $enc_path = '..\\tmp\\'. preg_replace('/[^0-9]/','', microtime()) . rand(0,1000) . "enc.txt";

 if (openssl_pkcs7_encrypt($unenc_path, $enc_path, $key, $ArrayMessageProperties))
 {
    $info = file_get_contents($enc_path);

    foreach ($easy_access_emails as $email)
    {
         mail($email, $subject, $info, $headers);
    }
} else {
    die("Failed Encryption");
}

, который работает правильно в моей локальной среде разработчика (Macbook работает с LAMP). Я переместил его на сервер Windows для тестирования, и теперь openssl_pkcs7_encrypt каждый раз дает сбой. Я предполагаю, что это проблема с разрешениями, так как функция должна писать в $enc_path; Но я сделал каталог на сервере Windows примерно настолько открытым, насколько это возможно. (установите полный контроль практически для каждого пользователя / группы, которые могут иметь к этому какое-либо отношение. Кто-нибудь знает хороший метод для отладки этого? Похоже, что функция просто возвращает false, когда она завершается ошибкой, без указания причины.

После дальнейшего изучения выясняется, что у сценария есть доступ на запись в каталог. Он пишет в $ unenc_path без проблем, просто не удается при вызове openssl_pkcs7_encrypt.

Еще одно обновление: Я использую filemon для просмотра некоторых запросов и вижу, как они открываются и записываются в незашифрованный файл, но нет выходных данных, даже если он пытается записать в зашифрованный файл.

Также добавлена ​​строка, которая загружает ключ. Я подтвердил, что он загружается, отражая его, и это кажется хорошим.

Еще одно обновление: Снова просматривая filemon, примерно в то время, когда он должен вызывать openssq_pkcs7_encrypt Я вижу запись о том, что она ищет незашифрованное сообщение в каталоге windows tmp.

w3wp.exe:4172  C:\windows\system32\tmp\04277530010012336..msg.txt 
PATH NOT FOUND  Options: Open Access: Read

Ответы [ 2 ]

4 голосов
/ 04 февраля 2009

Оказалось, что Windows / openssl_pkcs7_encrypt не нравился этот относительный путь, давая полный путь после возни с прямым и обратным слешами (/. \\), чтобы немного его исправить.

1 голос
/ 03 февраля 2009

Вы загружаете ключ в $key где-нибудь в своем коде? Я не вижу его во фрагменте

...