Debian packages 的签名与验证

1. 生成 GPG 密钥

首先需要生成 GPG (GNU Privacy Guard)密钥对用于签名:

复制代码
# 生成 GPG 密钥
gpg --gen-key

# 选择密钥类型(推荐 RSA)
# 选择密钥大小(推荐 2048 或 4096)
# 设置密钥有效期(0 表示永不过期)
# 输入姓名、邮箱和注释信息
# 设置保护私钥的密码

查看生成的密钥:

复制代码
gpg --list-keys

2. 导出公钥

将公钥导出以便其他人可以验证你的签名:

复制代码
# 导出公钥到文件
gpg --armor --export your-email@example.com > public-key.gpg

# 或者直接显示在终端
gpg --armor --export your-email@example.com

3. 安装 dpkg-sig 工具

复制代码
sudo apt-get install dpkg-sig

4. 签名 Debian 包

使用 dpkg-sig 对 Debian 包进行签名:

复制代码
# 获取 GPG 密钥 ID(从 gpg --list-keys 输出中获取)
gpg --list-keys

# 使用 dpkg-sig 签名包
dpkg-sig -k <GPG密钥ID> --sign builder package-name.deb

# 示例
dpkg-sig -k E5124174 --sign builder aribas_1.64-6_amd64.deb

5. 验证签名

在同一台机器上验证:

复制代码
dpkg-sig --verify package-name.deb

如果验证成功,将显示 GOODSIG。

在其他机器上验证:

  1. 首先导入签名者的公钥:

    gpg --import public-key.gpg

  2. 然后验证包签名:

    dpkg-sig --verify package-name.deb

6. 常见问题解决

旧版本 dpkg-sig 的兼容性问题

如果遇到 BADSIG错误(特别是对于 xz 压缩的包),可能是 dpkg-sig 版本过旧:

复制代码
# 手动下载新版本
wget http://archive.ubuntu.com/ubuntu/pool/main/d/dpkg-sig/dpkg-sig_0.13.1+nmu4_all.deb

# 解压并提取可执行文件
ar vx dpkg-sig_0.13.1+nmu4_all.deb
tar -xvf data.tar.xz

# 使用新版本验证
./usr/bin/dpkg-sig --verify package-name.deb

7. 完整流程示例

复制代码
# 1. 生成密钥
gpg --gen-key

# 2. 查看密钥ID
gpg --list-keys

# 3. 签名包
dpkg-sig -k E5124174 --sign builder my-package.deb

# 4. 验证签名
dpkg-sig --verify my-package.deb

# 5. 导出公钥供他人使用
gpg --armor --export your-email@example.com > my-public-key.gpg

注意事项

  • 确保使用足够强度的密钥(2048位或以上)

  • 妥善保管私钥和密码

  • 在验证环境中正确导入公钥

  • 定期更新密钥和检查签名有效性

通过以上步骤,你可以确保 Debian 包的完整性和来源可信性,满足安全标准要求。

参考:

https://hussainaliakbar.github.io/generating-and-using-GPG-keys/ https://hussainaliakbar.github.io/digitally-signing-and-verification-of-debian-packages-with-dpkg-sig/

相关推荐
姜鱼问生2 小时前
Nginx 缓存命中率监控:从 X-Cache-Status 到实时统计
运维·nginx·缓存
Apipi*2 小时前
30天速通Linux 第六章信号及信号处理
linux·运维·信号处理
运维行者_4 小时前
网络性能监控怎么做?从自动发现到根因分析的4个环节
运维·服务器·网络·人工智能·支持向量机
此时不提桶,更待何时4 小时前
06-14-A-Kafka集群运维与迁移实战详解
运维·kafka
IT研究所6 小时前
AI-ITR平台如何减少客户问题反复升级?
大数据·运维·人工智能·低代码·自然语言处理·安全架构·企微
AIgorithmGEEK6 小时前
[Linux]从手写报头到内核套路:序列化、反序列化与自定义协议全链路
linux·运维·服务器·网络·序列化·反序列化
Nil2086 小时前
leetcode 139单词拆分
linux·运维·服务器
Starry-sky(jing)6 小时前
BUG: unable to handle kernel paging request 完整排查:dmesg 四要素与三路定罪
linux·运维·服务器·内核·排障
mounter6256 小时前
从硬件互连到操作系统变革:CXL 技术演进与 Linux 内核工程挑战
linux·运维·服务器
zhengqweasd6 小时前
机房托管服务器怎么选硬盘,机械盘和 SSD 托管场景差异
运维·服务器·github