验证C代码中的rpm签名?

时间:2015-11-27 09:16:59

标签: c rpm signature

如何在C代码中验证rpm包的签名(使用GPG签名)? 想要读取签名的rpm标题,以便我可以使用openssl调用进行验证。

我是否正在思考正确的方向?

2 个答案:

答案 0 :(得分:2)

来自Fedora的

"Programming RPM with C"可能有所帮助,特别是"Reading the RPM lead and signature"部分。这只是一些C调用的概述;它然后说"当然,你可以用签名做更多的事情,而不仅仅是阅读它。查看在线RPM文档,了解有关验证签名的更多信息。"

答案 1 :(得分:1)

验证签名的简单方法是(在C代码中)打开管道到rpm命令以验证包:

FILE *fp = popen("rpm -K mypackagefile.rpm 2>&1 ", "r");
...read the result with fgets, or whatever
pclose(fp);

从命令行,输出几个例子:

$ rpm -K ncurses6-6.0-20150725.x86_64.rpm |for-paste
ncurses6-6.0-20150725.x86_64.rpm: (sha1) dsa sha1 md5 gpg OK

$ rpm -Kv ncurses6-6.0-20150725.x86_64.rpm
ncurses6-6.0-20150725.x86_64.rpm:
    Header V4 DSA/SHA1 Signature, key ID f7e48edb: OK
    Header SHA1 digest: OK (208298c8b2ee9db30f01c817b773ce30caf74034)
    MD5 digest: OK (88c6c126cc1dc4d2a38916c3fce448be)
    V4 DSA/SHA1 Signature, key ID f7e48edb: OK

在第一个(非详细)情况下,仅在签名验证时才打印gpg。您可以使用-v详细选项显示签名f7e48edb的详细信息。

供参考: