【问题标题】:PHP GNUPG: Cannot import keyPHP GNUPG:无法导入密钥
【发布时间】:2014-04-27 19:09:58
【问题描述】:

我对使用 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,但不能老实说。我希望有更多关于这方面的信息。如果有人可以提供帮助,我将不胜感激。

谢谢, 詹姆斯

【问题讨论】:

    标签: php import gnupg


    【解决方案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() 执行时也可以单独工作,但我使用该类来导入我的密钥,并认为我不妨保留它。

    【讨论】:

    • 我尝试使用该软件包,但它没有通过使用 .: Gen Key : 函数向我返回任何密钥。知道为什么吗?没有记录错误日志。或者你有替代方案吗?
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2015-08-22
      • 1970-01-01
      • 2021-08-14
      • 1970-01-01
      • 1970-01-01
      • 2017-05-08
      • 2015-02-23
      • 2014-05-21
      • 1970-01-01
      相关资源
      最近更新 更多