gpt4 book ai didi

python - 如何使用Python3检查rpm GPG签名?

转载 作者:太空宇宙 更新时间:2023-11-03 16:41:30 25 4
gpt4 key购买 nike

我正在本地 Artifactory 实例上创建本地 CentOS 镜像,并构建了一个 Python3 脚本来检查远程和本地存储库之间的差异并相应地更新本地存储库。

作为一项要求,我需要添加一个步骤,在将下载的 rpm 包添加到本地镜像之前检查其有效性。

虽然我可以通过调用“rpm -K”(导入 CentOS GPG key 后)来实现这一点,但我想知道是否有更好的方法可以实现这一点,也许不需要依赖外部包。

最佳答案

这是一个简短的 shell 脚本,用于从 *.rpm 文件中提取“明文”(即已签名的区域)。这是针对 header+payload 签名的,仅 header 签名明文类似,只是只有 header blob)。

您将需要签名(您可以使用 rpm-python 绑定(bind),请参阅下面的注释),并且您将需要 python 绑定(bind)到 gpg 才能验证包签名。

请注意,验证下载的且可能被篡改的包需要解析以查找明文并检索签名,这已经是一件棘手的事情:在验证签名之前,您可能会被利用。

================================/usr/lib/rpm/tgpg

#!/bin/sh

for pkg in $*
do
if [ "$pkg" = "" -o ! -e "$pkg" ]; then
echo "no package supplied" 1>&2
exit 1
fi

plaintext=$(mktemp /tmp/tgpg-$$.XXXXXX)
detached=$(mktemp /tmp/tgpg-$$.XXXXXX)

# --- Extract detached signature

rpm -qp -vv --qf '%{siggpg:armor}' $pkg > $detached

# --- Figger the offset of header+payload in the package

leadsize=96
o=$(expr $leadsize + 8)

set $(od -j $o -N 8 -t u1 $pkg)
il=$(expr 256 \* \( 256 \* \( 256 \* $2 + $3 \) + $4 \) + $5)
dl=$(expr 256 \* \( 256 \* \( 256 \* $6 + $7 \) + $8 \) + $9)

sigsize=$(expr 8 + 16 \* $il + $dl)
o=$(expr $o + $sigsize + \( 8 - \( $sigsize \% 8 \) \) \% 8)

# --- Extract header+payload

dd if=$pkg ibs=$o skip=1 2>/dev/null > $plaintext

# --- Verify DSA signature using gpg

gpg --batch -vv --debug 0xfc02 --verify $detached $plaintext

# --- Clean up

rm -f $detached $plaintext
done

关于python - 如何使用Python3检查rpm GPG签名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36741356/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com