为了确保您从公共 npm 注册表或任何支持签名的注册表下载的包的完整性,您可以使用 npm CLI 验证下载包的注册表签名。
可以使用以下 audit 命令验证注册表签名:
$ npm audit signatures
如果遵循以下约定,npm CLI 支持任何注册表提供的注册表签名和签名密钥:
dist 对象中每个已发布版本的包的 packument 中提供:"dist":{
"..omitted..": "..omitted..",
"signatures": [{
"keyid": "SHA256:{{SHA256_PUBLIC_KEY}}",
"sig": "a312b9c3cb4a1b693e8ebac5ee1ca9cc01f2661c14391917dcb111517f72370809..."
}]
}
查看来自公共 npm 注册表的签名包的 示例。
sig 使用以下模板生成:${package.name}@${package.version}:${package.dist.integrity} 和 keyid 必须匹配下面的公共签名密钥之一。
registry-host.tld/-/npm/v1/keys 以以下格式提供:{
"keys": [{
"expires": null,
"keyid": "SHA256:{{SHA256_PUBLIC_KEY}}",
"keytype": "ecdsa-sha2-nistp256",
"scheme": "ecdsa-sha2-nistp256",
"key": "{{B64_PUBLIC_KEY}}"
}]
}
键响应:
expires:空或简化扩展 ISO 8601 格式:YYYY-MM-DDTHH:mm:ss.sssZkeydid:公钥的sha256指纹keytype:npm CLI 目前仅支持 ecdsa-sha2-nistp256scheme:npm CLI 目前仅支持 ecdsa-sha2-nistp256key:base64 编码的公钥请参阅此 来自公共 npm 注册表的示例密钥响应。