【问题标题】:Check if an entered public key is a valid OpenPGP key检查输入的公钥是否是有效的 OpenPGP 密钥
【发布时间】:2016-04-06 02:07:08
【问题描述】:

我正在使用 PHP 中的 GnuPG 类。我在导入有效公钥时没有任何问题,但如果我尝试导入像“test”这样的随机内容,显然不是公钥,我会收到错误 502 bad gateway。我在 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>

【问题讨论】:

  • 不,在我看来不一样。我正在使用 GnuPG 类,并阅读了以下文档:secure.php.net/manual/en/function.gnupg-import.php 如果导入过程失败,该方法将返回 FALSE,如果我输入正确的 pgp,我的表单可以正常工作,没有任何问题,但如果我输入了假的pgp 我的表单只是抛出 502 bad gateway,我想控制这种错误,但我不知道如何检查 pgp 是否是正确的 pgp @Oxi
  • 听起来 gnupg_import() 可以正常工作,并且当提供无效密钥时,您的脚本只会运行严重破坏。最好显示一些代码。
  • 我用我的代码@maxhb 更新了我的问题
  • PHP 是如何接口的?查看您的 Web 服务器的日志文件为什么您会收到错误的网关错误消息。

标签: php public-key-encryption gnupg privacy pgp


【解决方案1】:

错误 502 “Bad Gateway” 表示 Web 服务器与其背后的某些东西之间的连接被中断 - 例如,当使用 nginx 和 php-fpm 时会发生这种情况,通过另一个网络连接/套接字访问它。在请求进一步调试信息的 cmets 中,您确认了这个猜测,并且还意识到 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]

【讨论】:

  • 抱歉再次打扰您...我搬到了 Debian,安装了 nginx、php 等如果我执行 $ apt-cache show php5-gnupg 它什么也没有显示,我将 php5-gnupg 搜索到 Synaptic 但它没有向我显示任何具有该名称的包。我从浏览器下载了包并安装了 php5-common 和 lipgpgme11,但是我不知道如何安装 phpapi-20131226 以及当我执行 $ dpkg -i php5-gnupg_1.3.3-1+b1_amd64.deb 时它需要 phpapi-20131226 你能指导我一点吗?再次感谢@JensErat
  • 您安装了哪个 Debian 版本? package is available since Debian 8 (Jessie),这是当前的稳定版本。
  • 哦该死,我有 Debian 7.8... 如果我在 Debian 8 中安装它,我应该可以毫无问题地安装它吗? @JensErat
  • 您也许可以添加 Jessie/stable 存储库并从那里安装软件包(这是很多人在桌面上做的事情,基于 stable 并从测试/实验中提取软件包),但期望有时会涉及依赖项。有什么阻止您升级到 8 吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多