Проверьте, является ли введенный открытый ключ действительным ключом OpenPGP


Я использую класс GnuPG из PHP. У меня нет никаких проблем с импортом действительного открытого ключа, но если я попытаюсь импортировать что-то случайное, например "тест", которое, очевидно, не является открытым ключом, я получаю ошибку 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>
Author: Kevin Gravell, 2016-01-01

1 answers

Ошибка 502 "Плохой шлюз" указывает на то, что соединение между веб-сервером и чем-то, находящимся за ним, было прервано - это происходит, например, при использовании nginx вместе с php-fpm, доступ к которому осуществляется через другое сетевое соединение/сокет. В комментариях, запрашивающих дополнительную отладочную информацию, вы подтвердили это предположение, а также поняли, что php терпит крах из-за ошибки сегментации , что означает, что должно было быть какое-то недопустимое место в памяти. доступный.

Это может произойти либо из-за ошибки (чего я бы не ожидал в данном случае, поскольку недопустимый ключ не является каким-то совершенно неожиданным вводом, который никто не будет проверять), либо из-за того, что скомпилированные версии на самом деле не подходят друг другу. Вы объяснили, что некоторые детали вы строите самостоятельно.

Отладка это хлопотно и часто занимает много часов, вам нужно будет подключить отладчик и понять, что происходит не так. Если у вас есть хоть какой-то шанс, попробуйте установить все из пакета менеджер по вашему выбору, не используйте разные источники, такие как 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 <[email protected]>
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]
 1
Author: Jens Erat, 2016-01-01 18:34:12