Проверьте, является ли введенный открытый ключ действительным ключом 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>
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]