我对使用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
,但不能诚实地说。我希望有更多关于此的信息。如果有人可以提供帮助,我将非常感激。
谢谢, 詹姆斯
答案 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,这是花了整整一天时间试图解决它之后为我解决的问题