尽管使用了有效密钥,但Gnupg仍会给出“ get_key失败”

时间:2019-09-21 20:40:19

标签: php gnupg pgp

在寻找使用的东西(扩展名,库等)之后,我想将PGP加密集成到我的Web应用程序中,因此我决定使用gnupg扩展名来使用php。现在,我在一个桌面文件夹中确实有一个PGP密钥,并且我尝试将其指纹用作addencryptkey的字符串,我收到的错误是get_key failed,我不明白为什么,我的PGP密钥有效。

关于SO有两个非常相似的问题:

php gnupg get_key failed error

gnupg get_key failed in php

基于这些,我对代码进行了一些更新,但均未成功,这是当前的样子:

  putenv("GNUPGHOME=/home/user/Desktop/Keys/.gnupg/");

  $pgp = new gnupg();

  $pgp->addencryptkey("F0E2DF9C82ECE67935171F4939D8599A923820D9");
  echo $pgp->geterror();

putenv中指定的文件夹中,我的公钥保存在.asc文件中。除非它仅适用于存储在服务器上的密钥,否则我看不出问题的实质是什么?

1 个答案:

答案 0 :(得分:0)

just 想分享我针对此问题的解决方案。鉴于这是有关该主题的最新问题之一,所以我认为最好在这里分享。

当时,我能够很好地加密消息(带有GNUPG PECL扩展名的PHP 7.4)。

为解决get_key_failed错误,在设置/导入密钥后,我将整个.gnupg目录复制到了Web服务器的根目录(在本例中为/ var / www / html)并更新了其目录权限,以便Web服务器可以访问它。

putenv("GNUPGHOME=/var/www/html/.gnupg");

我认为这可以解决问题,但是在尝试解密消息时遇到了一个新错误:

Uncaught Exception: decrypt failed

我唯一解决此问题的方法是,确保我的密钥对没有设置密码。有关PHP GNUPG文档的一些评论建议,无论如何adddecryptkey()的第二个参数密码都将被忽略。但是,在我的情况下,解密仅适用于未设置密码短语的私钥。

这适用于我的本地实例(Ubuntu 18),并且在部署到运行Amazon Linux 2的EC2实例时有效。