尝试使用 debsig-verify 验证 .deb 软件包的签名时未找到有效的 OpenPGP 数据

尝试使用 debsig-verify 验证 .deb 软件包的签名时未找到有效的 OpenPGP 数据

语境

.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 有用的方法(在策略文件中更改httphttps)对我来说却不起作用。

遵循的步骤

我相信我已经成功完成了 slack 提供的说明的第一步:

  1. 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
    
  2. 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]
    
  3. 用于存储 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'
    
  4. 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
    
  5. 创建的文件/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而不是httpslack howto 建议的 URL,请遵循https://stackoverflow.com/questions/55858700/(否则我也会收到错误)。请注意,这样 URL也与上面步骤 1 中生成的PolicyURL 相匹配。Signature Namespacedebsig-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

https://stackoverflow.com/a/61014204/2916936

答案3

这是因为https://slack.com/gpg/slack_pubkey_2019.gpg是用 gpg v1 生成的,你可以用 gpg v2 尝试以下操作

  1. 导入 v1 密钥(https://slack.com/gpg/slack_pubkey_2019.gpg
  2. 使用 gpg2 导出相同的密钥
  3. v1 键上的 delete-key
  4. 导入使用 gpg2 导出的密钥

相关内容