要在php 7中使用gpg发送加密消息,它会要求输入密码

时间:2016-11-20 10:20:40

标签: gnupg php-7

我们最近切换到Ubuntu 16.04并在那里用于php 7.0

没有我遇到我们的一个PHP脚本的问题,这个脚本使用成熟的邮件界面更新成熟并向他们发送GPG签名邮件,他们用它们进行身份验证。但是现在php cli开始提示使用密钥来使用密码。如何防止这个密码短语问题我试图从密钥中删除密码短语,但这没有帮助。

我的php代码如下所示:

$gpgkey = "some thubprint of a key";
$gpgpwd = "Secret";
$res = gnupg_init();
gnupg_addsignkey($res,$gpgkey,$gpgpwd);
$updatemessages = "test";
$signedupdatemessages = gnupg_sign($res, $updatemessages);

希望有人知道溶解

亲切的问候,

Bas van den Dikkenberg

1 个答案:

答案 0 :(得分:0)

Ubuntu 16.04发布了一个相当新版本的GnuPG,它不允许在没有进一步麻烦的情况下设置没有pinentry的密码短语。这是因为相当大(因此容易出现安全问题)GnuPG应用程序不应该能够访问私钥和密码短语,因此这些操作被提取到较小的gpg-agent(现在正在查询密码短语)。

删除密码/将其设置为空密码应该运行良好,请务必为正确的用户设置密码(GnuPG具有每个系统用户的密钥库)。

setting a passphrase is using the gpg-preset-passphrase utility的“GnuPG-2.0-way”,通常安装在/usr/lib/gnupg2/gpg-preset-passphrase中,用于Debian和派生的发行版。您需要通过将allow-preset-passphrase添加到~/.gnupg/gpg-agent.conf并运行

来允许此操作
/usr/lib/gnupg2/gpg-preset-passphrase -c [keygrip]

在STDIN上提供密码短语( not 使用echo-P选项时,所有其他系统用户都可以使用这两种方式读取密码!)。可以通过运行gpg2 --with-keygrip --list-secret-keys来获取keygrip。