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

GnuPG是';t使用nginx在PHP中工作,php,encryption,nginx,gnupg,Php,Encryption,Nginx,Gnupg,我想我可能错过了什么,但我现在没看到。我想创建一个简单的表单,用户可以在其中自动加密他们之间的消息(formmessagetouser2->encrypt(message)->user2接收并解密)。我正在使用nginx,我按照他们的说明安装了gnupg,并将其添加到我的php.ini中(现在它显示gnupg已在GPGME版本1.4.3和扩展版本1.3.6中启用)。我想使用位于/usr/share/nginx/.gnupg的特定键环。我尝试了以下代码: $iterator = new gnupg

我想我可能错过了什么,但我现在没看到。我想创建一个简单的表单,用户可以在其中自动加密他们之间的消息(formmessagetouser2->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_keylistiterator)#1(0){}

也许我的问题是个白痴问题,但我从来没有在php中使用过gnupg,我想学习,但我从昨天开始就感到恶心,我不明白为什么它不起作用。。。
感谢您的时间

最常见的问题是您将密钥导入到另一个keyring,而不是稍后搜索密钥。GnuPG使用每个(系统)用户的“GnuPG主目录”,每个目录包含单独的键环。如果以管理员或开发人员的身份导入密钥,则将密钥导入到自己的keyring中,而运行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)
在使用密钥之前导入密钥(但这会导致导入密钥的性能下降)。

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

您可以通过在初始化GnuPG绑定之前设置一个环境变量来进行设置

putenv("GNUPGHOME=/tmp");  // Set GnuPG home directory to the temp folder
$res = gnupg_init();       // Initialize GnuPG
显然
/tmp
实际上不符合合理目录的条件,请选择应用程序存储应用程序数据的目录。它不应该是可通过HTTP访问的目录


另一种选择是,
gnupg\u import($res,$pubkey)
在使用密钥之前先导入密钥(但这会导致导入密钥的性能损失)。

nginx建议您运行php fpm(php等效于fcgi)。php运行时在请求之间保持活动状态,因此如果更改设置(ini文件),则必须重新启动服务器(
sudo service php fpm restart
sudo service nginx restart
)以加载新设置。我知道我执行了sudo service php5 fpm restart和sudo service nginx restart,我对phpinfo()做了一个回音,它显示我启用了gnupg,但它对我来说还不起作用。。。我不知道我是否需要指定钥匙圈或其他东西@Ellasvanotegemini您编辑了哪些文件?PHP-CLI使用的文件,还是所有服务器文件?检查a
phpinfo()上列出的ini文件页面,检查gnupg文件的权限(所有权等)。还要检查日志。如果在实例上迭代没有发出
无效或单元化的gnupg对象
错误消息,那么问题就出在其他地方。看看,这将是我的第一个调用端口。您在哪里强制使用GnuPG主目录/keyring文件夹?你真的把钥匙导入这个钥匙圈了吗?GnuPG具有每个(系统)用户的密钥环,并且不在它们之间共享内容。确保为运行PHP的用户(正确地说是web服务器用户)正确设置了GnuPG主目录上的权限,GnuPG对权限问题非常挑剔。如果我没有错的话,我将所有服务器文件编辑到phpinfo()中,它显示了PHP.ini加载/etc/php5/fpm/PHP.ini的一个路径,并且该文件添加了扩展名。我检查了我的nginx错误日志,没有任何错误@ellasvanotegemnginx表明您正在运行php-fpm(与fcgi相当的php)。php运行时在请求之间保持活动状态,因此如果更改设置(ini文件),则必须重新启动服务器(
sudo service php fpm restart
sudo service nginx restart
)以加载新设置。我知道我执行了sudo service php5 fpm restart和sudo service nginx restart,我对phpinfo()做了一个回音,它显示我启用了gnupg,但它对我来说还不起作用。。。我不知道我是否需要指定钥匙圈或其他东西@Ellasvanotegemini您编辑了哪些文件?PHP-CLI使用的文件,还是所有服务器文件?检查a
phpinfo()上列出的ini文件页面,检查gnupg文件的权限(所有权等)。还要检查日志。如果在实例上迭代没有发出
无效或单元化的gnupg对象
错误消息,那么问题就出在其他地方。看看,这将是我的第一个调用端口。您在哪里强制使用GnuPG主目录/keyring文件夹?你真的把钥匙导入这个钥匙圈了吗?GnuPG具有每个(系统)用户的密钥环,并且不在它们之间共享内容。确保为运行PHP的用户(正确地说是web服务器用户)正确设置了GnuPG主目录上的权限,GnuPG对权限问题非常挑剔。如果我没有错的话,我将所有服务器文件编辑到phpinfo()中,它显示了PHP.ini加载/etc/php5/fpm/PHP.ini的一个路径,并且该文件添加了扩展名。我检查了我的nginx错误日志,没有任何错误