GnuPG不是';t使用nginx在PHP中工作


GnuPG isn't working in PHP with nginx

我想我可能遗漏了什么,但我现在没有看到。我想创建一个简单的表单,用户可以在其中自动加密他们之间的消息(表单消息到user2->encrypt(message)->user2接收并解密)。我使用的是nginx,我按照他们的说明安装了gnupg,并将其添加到我的php.ini中(现在它显示gnupg是用GPGME版本1.4.3和扩展版本1.3.6启用的)。我想使用位于/usr/share/nginx/.gnupg的特定密钥环。我尝试了以下代码:

$iterator = new gnupg_keylistiterator("developer");
foreach($iterator as $fingerprint => $userid) {
    echo $fingerprint." -> " . $userid . "'n";
}
var_dump($iterator);

我刚刚从var_dump获得以下响应:

对象(gnupg_keylist迭代器)#1(0){}

也许我的问题是个白痴问题,但我从未在php中使用过gnupg,我想学习,但从昨天开始我就很震惊,我不明白为什么它不起作用。。。感谢您抽出时间

最常见的问题是,您将密钥导入到另一个密钥环中,而不是稍后搜索密钥。GnuPG使用每个(系统)用户的"GnuPG主目录",每个目录包含单独的密钥环。如果您以管理员或开发人员的身份导入密钥,则将该密钥导入到自己的密钥环中,而运行PHP应用程序的web服务器通常在另一个用户上下文中执行,并且找不到该密钥,从而导致在PHP中列出密钥时出现空结果。

您可以通过在初始化GnuPG绑定之前设置环境变量来设置这一点。

putenv("GNUPGHOME=/tmp");  // Set GnuPG home directory to the temp folder
$res = gnupg_init();       // Initialize GnuPG

显然,/tmp实际上并不是一个合理的目录,请选择应用程序存储应用程序数据的目录。它不应该是可通过HTTP访问的目录。

作为一种替代方案,gnupg_import($res, $pubkey)在使用密钥之前先对其进行处理(但这将导致导入密钥时的一些性能损失)。