エラーメッセージ
1 package has an invalid registry signature:
別の表記
- Someone might have tampered with this package since it was published on the registry!
- packages have invalid registry signatures:
- has a registry signature with keyid: SHA256:demo-registry-key-2026 but no corresponding public key can be found
複数のパッケージが該当する場合は「N packages have invalid registry signatures:」となります。`keyid` がレジストリの鍵に含まれていない署名は、コード `EMISSINGSIGNATUREKEY` で失敗します(「…has a registry signature with keyid: … but no corresponding public key can be found」)。無効な来歴アテステーションは「…has an invalid attestation」の下に一覧表示されます。
npm audit signatures (npm 9.5+) — registry signature check of installed packages
このエラーの意味
npm はレジストリの署名鍵に対応する公開鍵をダウンロードし、インストールされた各パッケージのレジストリ署名(`name@version:integrity` に対する ECDSA 署名)を確認しましたが、少なくとも 1 つのパッケージで検証に失敗しました。パッケージのメタデータ(tarball の完全性ハッシュを含む)がレジストリの署名後に変更されたか、インストール元のレジストリが公開していない鍵で署名しているかのどちらかです。npm は該当するパッケージを一覧表示し、最後に「Someone might have tampered with this package since it was published on the registry!」と出力します。
発生する理由
ミラーやプロキシのレジストリが異なるメタデータを返している
よくあるtarball の URL を書き換えたりパッケージを再パックしたりしながら元の署名をそのまま残すプライベートミラー(Verdaccio、Artifactory、Nexus)、あるいは独自の鍵で署名しているのにその鍵を `/-/npm/v1/keys` で公開していないプライベートミラーが該当します。
パッケージのメタデータまたは内容が変更された
ときどき完全性ハッシュまたは tarball が、レジストリが署名したものと異なります。そうでないと証明されるまでは、そのパッケージは侵害されたものとして扱ってください。
鍵が別の場所から取得されている
ときどきカスタムレジストリを使う場合、npm はそのレジストリから鍵を取得します。そのレジストリが再署名したメタデータを返しながら公開レジストリの鍵を返す場合(またはその逆の場合)、検証は失敗します。
修正方法
- 1.
公開レジストリと比較する
同じバージョンについて公開レジストリが示す完全性ハッシュがロックファイルと一致する場合、問題はミラーにあります。一致しない場合は、ロックファイルかパッケージが変更されています。
bash # Same version, straight from the public registry: does the integrity match your lockfile? npm view left-pad-lite@1.0.0 dist.integrity --registry https://registry.npmjs.org/ grep -A3 '"node_modules/left-pad-lite"' package-lock.json | grep integrity - 2.
CI でチェックを実行する
`npm ci` の後に `npm audit signatures` を実行すると、署名がない依存関係、署名が正しくない依存関係、来歴が一致しない依存関係があった場合にビルドが失敗します。
yaml # CI: fail the build on missing or invalid signatures and provenance - run: npm ci - run: npm audit signatures