从 npm 公共注册表验证包的 PGP 注册表签名(已弃用)

Note: 基于 PGP 的注册表签名将在 2023 年 4 月 25 日 上弃用,取而代之的是 ECDSA 注册表签名。 这意味着从该日期起,将不再使用 PGP 密钥签署任何新包,并且 托管在 Keybase 上的公钥 将过期。

为确保你从 npm 公共注册表下载的包版本的完整性,你可以手动验证包的 PGP 签名

Note: 由于在 Keybase 上完全验证签名需要重新检查证明(这需要网络活动),因此成本很高,因此我们建议仅在必要时验证签名 - 例如,在验证部署工件时,或最初将包存储在缓存中时。

先决条件

  1. https://keybase.io/download 安装 Keybase
  2. https://keybase.io 上创建 Keybase 账户
  3. 在 Keybase 上关注 "npmregistry"。
  4. 下载 npm 公共注册表的 PGP 公钥 的本地副本。

验证公共注册表的 npm 签名

Note: 以下步骤以 light-cycle 包的 1.4.3 版本为例。

  1. 在命令行上,获取所需包版本的签名并将其保存在文件中:

    npm view light-cycle@1.4.3 dist.npm-signature > sig-to-check
  2. 获取该版本的完整性字段(以下示例包括响应):

    npm view light-cycle@1.4.3 dist.integrity

    示例响应:

    sha512-sFcuivsDZ99fY0TbvuRC6CDXB8r/ylafjJAMnbSF0y4EMM1/1DtQo40G2WKz1rBbyiz4SLAc3Wa6yZyC4XSGOQ==
  3. 构造将唯一包名称和版本与完整性字符串联系起来的字符串(下面的示例包括响应):

    keybase pgp verify --signed-by npmregistry -d sig-to-check -m 'light-cycle@1.4.3:sha512-sFcuivsDZ99fY0TbvuRC6CDXB8r/ylafjJAMnbSF0y4EMM1/1DtQo40G2WKz1rBbyiz4SLAc3Wa6yZyC4XSGOQ=='

    示例响应:

    ▶ INFO Identifying npmregistry
    ✔ public key fingerprint: 0963 1802 8A2B 58C8 4929 D8E1 3D4D 5B12 0276 566A
    ✔ admin of DNS zone npmjs.org: found TXT entry keybase-site-verification=Ls8jN55i6KesjiX91Ck79bUZ17eA-iohmw2jJFM16xc
    ✔ admin of DNS zone npmjs.com: found TXT entry keybase-site-verification=iK3pjpRBkv-CIJ4PHtWL4TTcFXMpPiwPynatKl3oWO4
    ✔ "npmjs" on twitter: https://twitter.com/npmjs/status/981288548845240320
    Signature verified. Signed by npmregistry 3 years ago (2018-04-13 15:00:37 -0700 MST).
    PGP Fingerprint: 096318028a2b58c84929d8e13d4d5b120276566a.
npm 中文网 - 粤ICP备13048890号