2016-11-30 174 views
1

我需要使用gnupg_decrypt来解密正在发送给我们但无法使其工作的文件。我使用gnupg_keyinfo列出所有的公钥,它返回一个空数组。有谁知道为什么会发生这种情况?PHP的GnuPG keyinfo函数显示空数组

我使用的代码是:

$res = gnupg_init(); 
$info = gnupg_keyinfo($res, ''); 
print_r($info); 

在上面的链接将'',因为它应该列出所有密钥的模式的意见展望。

我已经在这里使用提供 http://irtfweb.ifa.hawaii.edu/~lockhart/gpg/gpg-cs.html

的信息建立一个公共密钥我的服务器上,当我运行GPG --list-键就说明它被成功创建。

我读的地方,你必须把

putenv('GNUPGHOME=/tmp'); 

在页面的顶部,以便为它工作,但没有到该文件夹​​中的关键没有提到,我无法找到用以上设置的位置。

我也读我可能没有权限存储密钥的文件夹,但我不知道它在哪里。

任何人都可以帮忙吗?

谢谢


得到这个工作我做了以下

chown -R {{user}} ~/.gnupg chmod 600 ~/.gnupg/* chmod 700 ~/.gnupg

然后重新导入使用gnupg_import功能键

+0

'ls -al〜/ .gnupg /'。验证该目录及其包含的文件是否可以通过Web服务器访问。您可能想从命令行尝试脚本:这将帮助您决定是否是权限问题。像'php -r'print_r(gnupg_keyinfo(gnupg_init(),''));'' – bishop

+0

您好主教,谢谢您的回复。我已经从命令行运行脚本,它的工作,所以我想这排除了权限问题(感谢您的提示)。我发布了从ls -al〜/ .gnupg /返回的内容截图。它对我来说看起来不错,对你来说呢? r和w的读写是否正确? –

+0

实际上,因为它*在命令行上成功*而在Web服务器上失败*意味着它*是一个权限问题。您的屏幕快照显示这些文件属于root用户,并且您的Web服务器可能不会以root身份运行。您需要将这些文件的所有权更改为Web服务器的所有权。像'chown -R apache〜/ .gnupg'。找出网络服务器用户,例如'ps aux | egrep'(apache | httpd)''。 – bishop

回答

1

的GnuPG有每个用户钥匙圈。您的网络服务器将不会以root用户身份运行(如果是这样,请立即更改),因此您必须分析Web服务器的用户并在该用户帐户下导入密钥(通常称为www-data或类似的东西,您可以也分成su)。或者,import the key through a PHP script