PHP GNUPG:无法导入密钥

时间:2014-03-20 18:01:21

标签: php import gnupg

我对使用GNUPG完全不熟悉。我使用YUM和WHM的内置模块安装程序在服务器上成功安装了它。

我正在尝试导入一个密钥,然后使用它来加密一个文件,该文件将在每晚的其他人的服务器上进行SFTP。我已经按照设置代码的教程,但无法超越这一点。我并没有真正找到任何有用的解释,说明为什么事情不会如所描述的那样起作用。我已按照此问题中的信息:Encrypt files using PGP in PHP?。不幸的是,写信息的人认为它第一次就能正常工作。我还发现其他有用的网页,例如http://devzone.zend.com/1278/using-gnupg-with-php/,遗憾的是这些网页也没有提供错误信息。

首先,我要说GNUPGHOME路径不对。我实际上不确定在哪里指向我刚才做的安装,只是将文件从另一个帐户目录复制到这个。我无法找到有关如何正确设置的信息,并希望我能够将新密钥导入这些文件并使用它们而不会出现问题。我目前使用的代码是:

putenv("GNUPGHOME=/home/smlivere/public_html/tmp/.gnupg");

echo "GetEnv: ".getenv("GNUPGHOME")."<br/><br/>";
echo "Is Dir: ".is_dir(getenv("GNUPGHOME"))."<br/><br/>";

$pubkey = "-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.5 (MingW32)

[public key data]
-----END PGP PUBLIC KEY BLOCK-----";

$enc = (null);


// create new GnuPG object
$gpg = new gnupg();

// throw exception if error occurs
$gpg->seterrormode(gnupg::ERROR_EXCEPTION);

try {
    $info = $gpg->import($pubkey);
    echo "gnupg_import RTV = <br/><pre>\n";
    var_dump($rtv);
    echo gnupg_geterror($res);
    echo "</pre>\n";
} catch (Exception $e) {
    echo 'ERROR: ' . $e->getMessage()."<br/>";
    echo "The exception code is: " . $e->getCode()."<br/>";
    echo "The exception was created on line: " . $e->getLine()."<br/>";

    echo "Stack Trace:<br/><pre>\n";
    print_r($e->getTrace());
    echo "</pre>\n";
}

我回来了:

GetEnv: /home/smlivere/public_html/tmp/.gnupg

Is Dir: 1

ERROR: import failed
The exception code is: 0
The exception was created on line: 147
Stack Trace:

Array
(
    [0] => Array
        (
            [file] => /home/smlivere/public_html/crons/export_dvm.php
            [line] => 147
            [function] => import
            [class] => gnupg
            [type] => ->
            [args] => Array
                (
                    [0] => -----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.5 (MingW32)

[public key data]
-----END PGP PUBLIC KEY BLOCK-----
                )

        )

    [1] => Array
        (
            [file] => /home/smlivere/public_html/crons/export_dvm.php
            [line] => 5
            [function] => encrypt_file
            [args] => Array
                (
                )
        )
)

我假设我最大的问题只是GNUPGHOME,但不能诚实地说。我希望有更多关于此的信息。如果有人可以提供帮助,我将非常感激。

谢谢, 詹姆斯

2 个答案:

答案 0 :(得分:1)

我终于使用这个类开始工作:http://www.phpclasses.org/package/378-PHP-Manipulate-messages-and-encryption-keys-with-PGP.html

但是,默认情况下,邮件加密不起作用。我不得不改变它以使用它来工作:

'gpg --no-tty --no-secmem-warning --homedir '.$_SERVER['DOCUMENT_ROOT'].'/tmp/.gnupg -e -a --yes --always-trust --batch --output [output path] -r [key id] [source path]'

$message是要加密的邮件,$gpg是GPG二进制文件的路径,$recp是用于存储密钥的用户名。

上面的命令在使用shell_exec()执行时也可以自行完成,但是我使用该类导入了我的密钥,并认为我可以保留它。

答案 1 :(得分:0)

如果您在本地计算机上使用php-fpm,请检查配置文件(/usr/local/etc/php/7.3/php-fpm.conf),看看是否将'daemonize'设置为no,如果将其设置为“否”,将其更改为“是”,然后重新启动php,这是花了整整一天时间试图解决它之后为我解决的问题