2016-08-11 3 views
1

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

さまざまなモード固有の%_vsflags *設定によって有効になっている場合、RPMはrpmdbから取得するときにヘッダーのみの署名を検証します。値については、/ usr/lib/rpm/macrosを参照してください。

「rpm -Vvv bash」と表示された場合は、確認が表示されます。特定のマクロを変更することによって、--query(または他の)rpmモードでヘッダのみの署名検証を有効にすることもできます。

rpmの外部を確認するには、ヘッダープレーンテキスト、ヘッダーのみの署名、およびpubkeyを取得する手段(特定の呼び出しではありません)があります。

+0

質問に対する具体的な回答:1)rpmヘッダーのみのシグネチャがインストールされたヘッダーに追加され、headerGet()を通じて取得できます。/usr/lib/rpm/rpmpoptで使用されているタグを参照してください。一度ペイロードが破棄されると、ヘッダーとペイロードの署名を検証する方法はありません。 –

+0

2)rpmでの「信頼できる」という概念は、pubkeyのインポートとまったく同じです。 gnupgと異なり、インポートされた公開鍵には信頼メトリックパケットが追加されません。 「信頼できる」キーを列挙した短いテーブルを追加し、必要に応じて署名付きパブキーIDを取得することができます。詳しくは、/ usr/lib/rpm/rpmpoptの--info post aliasを参照してください。 –

+0

これを明確にしていただきありがとうございます。署名の有無を確認するvsflagsはありますか?私はVERIFY_SIGNATUREをqva_flagsに追加して検証を実行していますが、署名がない(インストールされているRPMには( 'Signature:(none)')渡されます。私はqva_showPackageをオーバーライドしなければならないと思います。私自身のコールバックで、RPM署名オプションが存在するかどうかを確認します。そうですか? (DSAHEADER、RSAHEADER、SIGGPG、SIGPGP) – Critikullx

関連する問題