2015-11-27 54 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的詳細信息。

參考: