1

アップデート

どうやら、私はパスワードを持たない鍵を生成していると思っていたにもかかわらず、gnupg は依然としてパスワードを期待していました (gnupg 拡張機能はもはやサポートしていません)。Windows で Kleopatra を使用して新しいキーペアを再生成し、「パスフレーズなし」の警告をすべてバイパスして、それらのキーで正常に署名/暗号化することができました。

したがって、肝心なのは、キーにパスフレーズが含まれていないことを十分に確認することです


PHP の gnupg 拡張機能を使用してメッセージに署名しようとしています。環境が正しくセットアップされており、キーを正常にインポートでき、使用して追加するgnupg_addsignkeyと成功します (true を返します)。

を使用してメッセージに署名しようとするとgnupg_sign($res, "my message")、次のエラーが発生し、gnupg_sign が false を返します。

gnupg_sign(): data signing failed

なぜ失敗したのかを理解するために、より詳細な情報を取得する方法が見つからないようです。

オブジェクト指向の方法だけでなく、手続き型の方法も試しましたが、同じ結果が得られました。パーミッションはサーバー上ですべて正しいです。

私が使用したOOコードは次のとおりです。

# /tmp/.gnupg is there (but empty if that helps figure out the problem)
putenv("GNUPGHOME=/tmp/.gnupg");
$gpg = new gnupg();
$gpg->seterrormode(GNUPG_ERROR_WARNING);
$ascii = file_get_contents('/etc/my.key'); // Yes, this reads successfully

$start = strpos($ascii, '-----BEGIN PGP PRIVATE KEY BLOCK-----');
$end = strpos($ascii, '-----END PGP PRIVATE KEY BLOCK-----')+34;
$key = substr($ascii, $start, ($end-$start));

$info = $gpg->import($key); // Fingerprint is there and everything seems OK
$gpg->addsignkey($info['fingerprint']);
$signed = $gpg->sign("test!"); // fails with any string I try

$signedはfalseで、PHPの警告が表示されますgnupg::sign(): data signing failed

4

1 に答える 1