Сообщение об ошибке
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 скачал открытые ключи подписи реестра и проверил подпись реестра у каждого установленного пакета — подпись ECDSA над `name@version:integrity` — и как минимум у одного пакета проверка не прошла. Либо метаданные пакета (включая хеш целостности архива tarball) изменились после того, как реестр их подписал, либо реестр, из которого вы устанавливали пакеты, подписывает их ключами, которые не публикует. npm перечисляет затронутые пакеты и в конце выводит «Someone might have tampered with this package since it was published on the registry!».
Почему это происходит
Зеркало или проксирующий реестр отдаёт другие метаданные
частоЧастные зеркала (Verdaccio, Artifactory, Nexus), которые переписывают URL архивов пакетов или перепаковывают пакеты, но сохраняют исходные подписи, — либо подписывают своим ключом, не публикуя его по адресу `/-/npm/v1/keys`.
Метаданные или содержимое пакета изменены
иногдаХеш целостности или архив пакета отличается от того, что подписал реестр. Считайте пакет скомпрометированным, пока не доказано обратное.
Ключи получены из другого источника
иногдаЕсли настроен собственный реестр, npm запрашивает ключи у этого реестра. Если он возвращает ключи публичного реестра, а отдаёт переподписанные метаданные (или наоборот), проверка не проходит.
Как исправить
- 1.
Сравните с публичным реестром
Если хеш целостности (integrity) той же версии в публичном реестре совпадает с вашим lock-файлом, проблема в зеркале; если нет, изменён lock-файл или сам пакет.
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 audit signatures` после `npm ci` прерывает сборку, если среди зависимостей есть неподписанные, подписанные неверно или с несовпадающим происхождением.
yaml # CI: fail the build on missing or invalid signatures and provenance - run: npm ci - run: npm audit signatures