roave/composer-gpg-verify
Composer插件,用于验证下载依赖项的GPG签名,强制执行受信任的GIT标签
Requires
- php: ^7.1.4
- composer-plugin-api: ^1.0
Requires (Dev)
- composer/composer: ^1.4.2
- humbug/humbug: dev-master
- nikic/php-parser: >=3.0.5
- phpstan/phpstan: ^0.7
- phpunit/phpunit: ^5.7.19
- squizlabs/php_codesniffer: ^3.0
This package is auto-updated.
Last update: 2022-12-01 00:12:27 UTC
README
此包提供了可插拔的composer标签签名验证。
具体来说,此包所做的只是当遇到不受信任的包时停止安装过程。
此包的目的是作为第一个参考实现,以后在composer本身中使用,以强制执行良好的依赖项检查卫生。
使用方法
此包不提供可用的公共API,但在composer安装设置期间将只起作用
composer require roave/composer-gpg-verify --prefer-source
请注意,如果您有不受信任的依赖项,上述操作可能已经失败。为了跳过此包提供的检查,请在尚未确定不受信任的依赖项的情况下使用--no-scripts
标志
composer require roave/composer-gpg-verify --prefer-source --no-scripts
受信任的依赖项
此包广泛使用GPG
来验证所有下载的依赖项都具有良好的和受信任的GIT标签或提交签名。
目前,此包将仅使用您的本地GPG信任数据库来确定哪些签名是受信任的,或不受信任的,并且除了读取之外不会对其进行任何操作。
实际上,这意味着
- 您安装的每个包都必须是
git
仓库(使用--prefer-source
) - 每个仓库的
HEAD
(当前状态)必须是已签名的标签或已签名的提交 - 您必须对每个标签/提交签名有本地公钥的副本
- 您必须明确信任、本地签名或签名每个涉及的公钥
虽然这对大多数用户来说可能听起来像是一种无用的复杂性,因为他们只是信任packagist提供“良好”的依赖项,但这些可能已被攻击者伪造,他们从您最喜欢的维护者那里窃取了信息。
良好的依赖项卫生极为重要,此包鼓励维护者始终签名他们的发布,并鼓励用户始终检查它们。
信任某人的工作
假设您下载了一个签名的包,您可能会在第一次安装期间遇到以下失败
composer require some-vendor/some-package --prefer-source
# ... lots of lines here ...
The following packages need to be signed and verified, or added to exclusions:
some-vendor/some-package
[SIGNED] [NOT VERIFIED] Commit #4b825dc642cb6eb9a060e54bf8d69288fbee4904 (Key AABBCCDDEEFF1122)
Command: git verify-commit --verbose HEAD
Exit code: 1
Output: tree 4b825dc642cb6eb9a060e54bf8d69288fbee4904
author Mr. Maintainer <maintainer@example.com> 1495040303 +0200
committer Mr. Maintainer <maintainer@example.com> 1495040303 +0200
signed commit
gpg: Signature made Mi 17 Mai 2017 18:58:23 CEST
gpg: using RSA key AABBCCDDEEFF1122
gpg: Can't check signature: No public key
... more lines ...
这意味着some-vendor/some-package
不受信任。
那个AABBCCDDEEFF1122
是您缺少的密钥。让我们下载它
gpg --recv-keys AABBCCDDEEFF1122
现在密钥已存在于您的本地数据库中,但尚未受信任。
重要:不要盲目信任或签名他人的GPG密钥 - 只有在您确实知道密钥是由他们提供的,并且您至少略知一二的情况下才这样做。通常,联系密钥作者是检查真实性的最佳方式。
要信任密钥,您可以编辑它
gpg --edit-key AABBCCDDEEFF1122
...
gpg> trust
...
Please decide how far you trust this user to correctly verify other users' keys
(by looking at passports, checking fingerprints from different sources, etc.)
1 = I don't know or won't say
2 = I do NOT trust
3 = I trust marginally
4 = I trust fully
5 = I trust ultimately
m = back to the main menu
Your decision? 3
gpg> save
或者,如果您想签名gpg密钥,您可以创建本地签名
gpg --lsign-key AABBCCDDEEFF1122
如果您确实信任一个密钥,您可以创建一个通用的签名,该签名可以上传
gpg --sign-key AABBCCDDEEFF1122
一旦您完成了上述操作之一(签名或信任),然后您可以继续您的composer安装或升级过程。
示例
请参考示例目录来运行您系统中的示例。所有示例都设计为不会修改您当前的GPG设置。
限制
此包仍存在一些严重限制
- 需要运行
gpg
2.x
- 这意味着您可能应该使用Ubuntu 16.04或等效版本。 - 需要
gpg
2.x
- 它只能验证下载的GIT仓库的签名:任何非git包将导致验证失败
随着库进一步版本的开发,这些限制最终将得到缓解。