RPMパッケージが(1)署名済み(署名あり)と(2)署名に使用された鍵が信頼できるかどうかをプログラムで確認したいと思います。librpm - インストールされたパッケージの署名鍵を確認する方法
[root]$ rpm -qi setup
Name : setup
Signature : RSA/SHA1, Wed 02 Oct 2013 05:15:22 AM MDT, Key ID 0946
[root]$ rpm -qi testing
Name : testing
Signature : (none)
私はlibrpmのAPIを閲覧していますが、私はすでにインストールされたパッケージに署名検証を可能にする任意のパブリックメソッドを表示されません。さらに掘り
# This requires a file descriptor
rpmcli.h:rpmVerifySignatures
# This also requires a file descriptor
rpmlib.h:rpmReadPackageFile
私は、次を参照してください。
# This uses a callback `qva_showPackage` which gives (QVA_t, rpmts, Header)
rpmcli.h:rpmcliVerify
しかし、私は、コールバックによって渡されたヘッダからRPMタグ(RPMTAG_SHA1HEADER)を取得するように見えることはできません。これらのタグを取得できる場合は、
rpmpgp.h:pgpVerifySig
に電話して署名を確認することが理にかなっています。
編集:
Iは、署名検証作業の大部分がrpmcli.h:rpmVerifySignatures
介してのみ利用可能である静的メソッドrpmchecksig.c:rpmpkgVerifySigs
で行われる参照。しかし、この方法にはファイル記述子が必要です。すでにインストールされているパッケージからFDを取得してこの方法を使用できる方法はありますか?
質問に対する具体的な回答:1)rpmヘッダーのみのシグネチャがインストールされたヘッダーに追加され、headerGet()を通じて取得できます。/usr/lib/rpm/rpmpoptで使用されているタグを参照してください。一度ペイロードが破棄されると、ヘッダーとペイロードの署名を検証する方法はありません。 –
2)rpmでの「信頼できる」という概念は、pubkeyのインポートとまったく同じです。 gnupgと異なり、インポートされた公開鍵には信頼メトリックパケットが追加されません。 「信頼できる」キーを列挙した短いテーブルを追加し、必要に応じて署名付きパブキーIDを取得することができます。詳しくは、/ usr/lib/rpm/rpmpoptの--info post aliasを参照してください。 –
これを明確にしていただきありがとうございます。署名の有無を確認するvsflagsはありますか?私はVERIFY_SIGNATUREをqva_flagsに追加して検証を実行していますが、署名がない(インストールされているRPMには( 'Signature:(none)')渡されます。私はqva_showPackageをオーバーライドしなければならないと思います。私自身のコールバックで、RPM署名オプションが存在するかどうかを確認します。そうですか? (DSAHEADER、RSAHEADER、SIGGPG、SIGPGP) – Critikullx