Очевидно, хотя я думал, что генерирую ключи, у которых нет пароля, gnupg все еще ожидал пароль для них (который расширение gnupg больше не поддерживает). Я восстановил новую пару ключей, используя Kleopatra в Windows, и обошел все предупреждения «без пароля», и я смог успешно подписать / зашифровать эти ключи.
Итак, суть будет очень убедитесь, что ваш ключ не имеет парольной фразы.
Я пытаюсь подписать сообщение, используя расширение gnupg в PHP. У меня правильно настроена среда, и я могу успешно импортировать ключ и добавить его, используя gnupg_addsignkey
успешно (возвращает true).
Когда я пытаюсь подписать сообщение, используя gnupg_sign($res, "my message")
Я получаю следующую ошибку и gnupg_sign возвращает false:
gnupg_sign(): data signing failed
Я не могу найти какой-либо способ получить более подробную информацию, чтобы выяснить, почему она не работает.
Я попробовал процедурные методы, а также методы ОО, и получил тот же результат. Разрешение все правильно на сервере.
Вот код OO, который я использовал:
# /tmp/.gnupg is there (but empty if that helps figure out the problem)
putenv("GNUPGHOME=/tmp/.gnupg");
$gpg = new gnupg();
$gpg->seterrormode(GNUPG_ERROR_WARNING);
$ascii = file_get_contents('/etc/my.key'); // Yes, this reads successfully
$start = strpos($ascii, '-----BEGIN PGP PRIVATE KEY BLOCK-----');
$end = strpos($ascii, '-----END PGP PRIVATE KEY BLOCK-----')+34;
$key = substr($ascii, $start, ($end-$start));
$info = $gpg->import($key); // Fingerprint is there and everything seems OK
$gpg->addsignkey($info['fingerprint']);
$signed = $gpg->sign("test!"); // fails with any string I try
$signed
ложно, и я получаю предупреждение PHP gnupg::sign(): data signing failed
Защищен ли ваш личный пароль паролем?
В соответствии с документация по pecl / gnupg Вы не можете передать незашифрованный пароль для gnupg
≥ версия 2.
Так что все, что вы можете сделать, это использовать закрытый ключ, который имеет нет пароля установить, я думаю.
Ошибки IMO pecl / gnupg вводят в заблуждение.
Других решений пока нет …