语境
.deb
我想验证最新版本的 slack包 ( )的签名slack-desktop-4.1.2-amd64.deb
,该包是从https://slack.com/intl/en-es/downloads/linux。
我正在尝试按照 slack 为基于 Debian 的发行版提供的说明进行操作https://slack.com/intl/en-es/help/articles/115004809166-Verify-Slack-for-Linux-(beta)-package-signatures#version-4.1.2-and-above-1,使用debsig-verify
。
我知道 stackoverflow 中有一个类似的问题(来自 的相同错误消息debsig-verify
,但不同.deb
)(https://stackoverflow.com/questions/55858700/),但是对那个 OP 有用的方法(在策略文件中更改http
为https
)对我来说却不起作用。
遵循的步骤
我相信我已经成功完成了 slack 提供的说明的第一步:
debsig-verify
正确安装:# apt-get install debsig-verify [...] # debsig-verify --version Debsig Program Version - 0.18-6-g37b7 Signature Version - 1.0 Signature Namespace - https://www.debian.org/debsig/1.0/ Policies Directory - /etc/debsig/policies Keyrings Directory - /usr/share/debsig/keyrings
Slack 的公钥下载:
# wget https://slack.com/gpg/slack_pubkey_2019.gpg --2019-11-21 17:19:33-- https://slack.com/gpg/slack_pubkey_2019.gpg Resolving slack.com (slack.com)... 13.249.2.166 Connecting to slack.com (slack.com)|13.249.2.166|:443... connected. HTTP request sent, awaiting response... 200 OK Length: unspecified [text/plain] Saving to: ‘slack_pubkey_2019.gpg’ slack_pubkey_2019.g [ <=> ] 1.63K --.-KB/s in 0s 2019-11-21 17:19:33 (31.7 MB/s) - ‘slack_pubkey_2019.gpg’ saved [1670]
用于存储 debsigs 策略和 Slack 公钥的密钥环的目录已创建:
# mkdir -pv /usr/share/debsig/keyrings/F18462078E6C9578 mkdir: created directory '/usr/share/debsig/keyrings/F18462078E6C9578' # mkdir -pv /etc/debsig/policies/F18462078E6C9578 mkdir: created directory '/etc/debsig/policies/F18462078E6C9578'
Slack 的公钥导入到相应的 debsigs 密钥环中:
# gpg --no-default-keyring \ > --keyring /usr/share/debsig/keyrings/F18462078E6C9578/debsig.gpg \ > --import slack_pubkey_2019.gpg gpg: keybox '/usr/share/debsig/keyrings/F18462078E6C9578/debsig.gpg' created gpg: directory '/root/.gnupg' created gpg: /root/.gnupg/trustdb.gpg: trustdb created gpg: key F18462078E6C9578: public key "Slack Packages (Signing Key) <[email protected]>" imported gpg: Total number processed: 1 gpg: imported: 1
检查的密钥环文件的内容:
# gpg --no-default-keyring \ > --keyring /usr/share/debsig/keyrings/F18462078E6C9578/debsig.gpg \ > --check-sigs /usr/share/debsig/keyrings/F18462078E6C9578/debsig.gpg ------------------------------------------------------ pub rsa4096 2019-07-23 [SC] [expires: 2024-07-21] 93D5D2A628951B4383D8A4CEF18462078E6C9578 uid [ unknown] Slack Packages (Signing Key) <[email protected]> sig!3 F18462078E6C9578 2019-07-23 Slack Packages (Signing Key) <[email protected]> gpg: 1 good signature
创建的文件
/etc/debsig/policies/F18462078E6C9578/slack.pol
包含以下内容:<?xml version="1.0"?> <!DOCTYPE Policy SYSTEM "https://www.debian.org/debsig/1.0/policy.dtd"> <Policy xmlns="https://www.debian.org/debsig/1.0/"> <Origin Name="Slack" id="F18462078E6C9578" Description="Slack"/> <Selection> <Required Type="origin" File="debsig.gpg" id="F18462078E6C9578"/> </Selection> <Verification> <Required Type="origin" File="debsig.gpg" id="F18462078E6C9578"/> </Verification> </Policy>
请注意,对于我使用的 URL,
https
而不是http
slack howto 建议的 URL,请遵循https://stackoverflow.com/questions/55858700/(否则我也会收到错误)。请注意,这样 URL也与上面步骤 1 中生成的Policy
URL 相匹配。Signature Namespace
debsig-verify --version
不幸的是,最后一步失败了:
# debsig-verify -v -d slack-desktop-4.1.2-amd64.deb
debsig: Starting verification for: slack-desktop-4.1.2-amd64.deb
debsig: getSigKeyID: got F18462078E6C9578 for origin key
debsig: Using policy directory: /etc/debsig/policies/F18462078E6C9578
debsig: Parsing policy file: /etc/debsig/policies/F18462078E6C9578/slack.pol
debsig: parsePolicyFile: parsing '/etc/debsig/policies/F18462078E6C9578/slack.pol'
debsig: parsePolicyFile: completed
debsig: Checking Selection group(s).
debsig: Processing 'origin' key...
gpg: no valid OpenPGP data found.
gpg: processing message failed: Unknown system error
debsig: getKeyID subprocess returned error exit status 2
替代方法?
.deb
如果我打开并重新包装没有分离签名的包裹内容,我想我可以成功验证它:
# ar xv slack-desktop-4.1.2-amd64.deb
x - debian-binary
x - control.tar.gz
x - data.tar.xz
x - _gpgorigin
#
# cat debian-binary control.tar.gz data.tar.xz > combined
#
# gpg --no-default-keyring \
> --keyring /usr/share/debsig/keyrings/F18462078E6C9578/debsig.gpg \
> --verify _gpgorigin combined
gpg: Signature made Fri 25 Oct 2019 02:47:26 CEST
gpg: using RSA key F18462078E6C9578
gpg: Good signature from "Slack Packages (Signing Key) <[email protected]>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg: There is no indication that the signature belongs to the owner.
Primary key fingerprint: 93D5 D2A6 2895 1B43 83D8 A4CE F184 6207 8E6C 9578
问题
我的问题是:
最后一个命令的输出是否足以表明该
.deb
包已经过验证?我应该做些什么不同的事情来完成
debsig-verify
工作?
答案1
问题发生在 debsig-verify 调用时gpg --list-packets /path/to/debsig.gpg
。可能是为了验证指定的密钥是否包含在 debsig.gpg 中,也可能是为了检查是否存在其他密钥。
不幸的是 --list-packets 是一个不受支持的调试命令,不适用于新的密钥箱格式的密钥环文件。因此产生了上述错误消息。
如果您能够设法以旧密钥环 v4 格式生成 debsig.gpg,那么一切都应该没问题。除此之外,我们似乎只能寄希望于 debsig-verify 的 bug 修复。
不幸的是,没有选项可以让 gpg2 使用旧的密钥环格式,但有一个技巧。如果密钥环文件存在并且是旧格式,则 gpg2 将继续使用该格式。空文件会被检测为旧格式。基本上,您必须先触摸 debsig.gpg,然后再创建它。
因此,我设法成功使用debsig-verify
通过debsig.gpg
以下命令创建的:
rm -f /path/to/debsig.gpg
## trick gpg2 into using old keyring format
touch /path/to/debsig.gpg
gpg2 --no-default-keyring \
--keyring /path/to/debsig.gpg \
--import signing-pubkey.gpg
答案2
StackOverflow 上发布了一个类似的问题,其中有一个建议也适用于 Ubuntu 20.04。
这将导致错误
$ gpg --no-default-keyring
--keyring /usr/share/debsig/keyrings/DDDF2F4CE732A79A/debsig.gpg
--import这将有效
$ cp /usr/share/debsig/keyrings/DDDF2F4CE732A79A/debsig.gpg
答案3
这是因为https://slack.com/gpg/slack_pubkey_2019.gpg是用 gpg v1 生成的,你可以用 gpg v2 尝试以下操作
- 导入 v1 密钥(https://slack.com/gpg/slack_pubkey_2019.gpg)
- 使用 gpg2 导出相同的密钥
- v1 键上的 delete-key
- 导入使用 gpg2 导出的密钥