В PHP использование gpupg_decrypt никогда не завершается

Я использую PHP-модуль gnupg из pecl. В частности: модуль gpgme-devel 1.1.8 gnupg 1.3.3

Шифрование работает нормально и быстро. Использование gpg для расшифровки командной строки выполняется быстро. Когда я пытаюсь расшифровать с PHP, страница никогда не загружается, даже сообщения перед вызовом расшифровки не печатаются.

<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
putenv('GNUPGHOME=/var/www/.gnupg/');
$gpg = new gnupg();
$gpg->seterrormode(gnupg::ERROR_EXCEPTION);

$key_finger_print = 'XXXX'; // Censored for posting...
$phrase = 'XXXX'; // Censored for posting...
$message = 'XXX'; // Censored for posting...

try
{
  $gpg->adddecryptkey($key_finger_print,$phrase);
  $message = $gpg->decrypt($message)
}
catch(Exception $e)
{
  echo 'ERROR: ' . $e->getMessage();
}
?>

Ошибки не отображаются и не отображаются в журнале.

Редактировать: Таким образом, запуск того же скрипта из командной строки, а не через apache, заставляет gpg-agent запрашивать у меня фразу-пароль, даже если она была предоставлена ​​​​в вызове библиотеки.


person J. A. Streich    schedule 27.02.2014    source источник
comment
Я предполагаю, что вы не получаете что-то от веб-сервера. Вы проверили, загружен ли gnupg в php.ini веб-сервера, а не только в CLI?   -  person Aeveus    schedule 27.02.2014
comment
Ну, разве это не интересно.... используя cli, он запрашивает у меня парольную фразу, хотя она была предоставлена ​​библиотеке.   -  person J. A. Streich    schedule 27.02.2014
comment
Это указывает на неверный пароль. Еще раз убедитесь, что это правильно (и убедитесь, что вы не скопировали какие-либо странные символы из документов PDF или что-то в этом роде). Если вы используете не-ASCII-символы (то есть все с кодом ASCII до 128), взгляните на кодировку файла, возможно, интерфейс GnuPG что-то испортил.   -  person Jens Erat    schedule 27.02.2014
comment
Хорошая мысль, но я уверен, что это правильный пароль. Более того, библиотека должна генерировать исключение, если парольная фраза неверна. Парольная фраза во всех ASCII, хотя изменение переданной парольной фразы на ту, которая, как я знаю, неверна, показывает то же поведение. Может быть, мне придется сгенерировать ключ без парольной фразы? Пытаюсь сейчас...   -  person J. A. Streich    schedule 27.02.2014
comment
Ну, без парольной фразы работает. Я бы предпочел парольную фразу, поэтому я оставлю это открытым; но, по крайней мере, я могу перейти к следующей части проекта.   -  person J. A. Streich    schedule 27.02.2014
comment
@ J.A.Streich, что произойдет, если вы измените пароль нового ключа и повторите попытку? Кроме того, попробуйте echo $gpg->geterror(); после добавления ключа расшифровки и посмотрите, что говорится в сообщении. Когда вы пытались использовать ключ gpg от имени того же пользователя, под которым запускается php-скрипт с веб-сервером? Возможно, gpg нужно --init'd   -  person Tim Groeneveld    schedule 14.05.2014
comment
возможный дубликат segfault PHP GnuPG на веб-сервере   -  person Paul Sweatte    schedule 28.01.2015
comment
Павел, Это не одно и то же. На данный момент я просто избегаю использования парольных фраз, но основная проблема не вызывает segfault и не является проблемой разрешения (без парольной фразы все в порядке)   -  person J. A. Streich    schedule 29.01.2015