2015-11-27 52 views
0

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

我是否正朝着正确的方向思考?

+1

如果依赖于'rpm'可执行文件本身是可以接受的,那么你可以exec'rpm --checksig ...'并检查退出代码/输出。这可能不够优雅,但可能更容易一些。 –

+1

签名通常在任何情况下都使用GPG。 –

+0

不是rpm头的签名部分?不可能解析rpm并获得签名? –

回答

2

"Programming RPM with C"在Fedora也许会有帮助,特别是部分"Reading the RPM lead and signature"。这只是一些C调用的概述;然后它会说:“当然,您可以使用签名来做更多的事情,而不仅仅是阅读它。查看联机RPM文档以了解更多有关验证签名的信息。”

+0

我认为这条路线,但正如我所说的“简单的方法”。 –

+0

该文档与此无关。文档非常非常差,并且包含几乎没有用的信息,比如'Fclose',而不是真正与库一起工作。 –

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的详细信息。

参考: