我正在使用PHP的GnuPG类。我导入有效的公钥时没有任何问题,但如果我尝试导入一些随机的内容,例如" test"这显然不是一个公钥,我得到错误502坏网关。我在PHP文档中看到gnupg_keyinfo
显示了引入密钥环中存储的名称的信息。我在互联网上搜索,我没有找到一种方法来检查输入的公钥是否是正确的格式。
我使用以下代码:
<?php
putenv('GNUPGHOME=/home/kevin/.gnupg');
$gpg = '/usr/bin/gpg';
$gpg = new gnupg();
$gpg->seterrormode(gnupg::ERROR_EXCEPTION);
if(isset($_POST['2fa'])){
try {
$key = $_POST['new_pgp'];
$retVal = $gpg->import($key);
echo $retVal['imported'] . ' key(s) imported.';
} catch (Exception $e) {
die('ERROR: ' . $e->getMessage());
}
}
?>
<html>
<body>
<form action="pgp.php" method="post">
<textarea name="new_pgp"></textarea><br>
<input type="submit" name="2fa" value="Send">
</form>
</body>
</html>
答案 0 :(得分:1)
错误502“Bad Gateway”表示Web服务器及其后面的内容之间的连接被中断 - 例如,当使用nginx和php-fpm时会发生这种情况,这可以通过另一个网络连接/套接字访问。在请求进一步调试信息的评论中,您确认了猜测,并且还意识到php因为segmentation fault而崩溃,这意味着应该访问一些无效的内存位置。
这可能是因为一个错误(在这种情况下我不会期望,因为无效的密钥不是一些完全没有人会测试的输入),或者因为编译后的版本并不真正适合。你解释过你自己建造一些零件。
调试这是一件麻烦事,通常需要花费数小时,你需要连接一个调试器并意识到出了什么问题。如果您有任何机会,请尝试从您选择的软件包管理器安装所有内容,不要使用PECL和您的打包管理器等不同来源来防止出现问题。在Debian中(很可能也是Ubuntu和其他发行版,我没有验证)应该有一些像php5-gnupg
这样的包:
$ apt-cache show php5-gnupg
Package: php5-gnupg
Source: php-gnupg
Version: 1.3.6-1
Installed-Size: 84
Maintainer: Debian PHP PECL Maintainers <pkg-php-pecl@lists.alioth.debian.org>
Architecture: amd64
Depends: phpapi-20131226, php5-common (>= 4.4), libc6 (>= 2.4), libgpgme11 (>= 1.2.0)
Description-en: wrapper around the gpgme library
This extension provides methods to interact with gnupg.
[snip]