paragonie / certainty
证书颁发机构的最新、可验证的存储库
Requires
- php: ^5.5|^7|^8
- ext-curl: *
- ext-json: *
- guzzlehttp/guzzle: ^6|^7
- paragonie/constant_time_encoding: ^1|^2|^3
- paragonie/sodium_compat: ^1|^2
Requires (Dev)
- composer/composer: ^1|^2
- phpunit/phpunit: ^4|^5|^6|^7|^8|^9
README
自动化PHP项目的cacert.pem管理。 阅读介绍Certainty的博客文章。
需要PHP 5.5或更高版本。 Certainty应在任何操作系统(包括Windows)上工作,尽管在Virtualbox共享文件夹中可能无法使用符号链接功能。
Certainty是为谁设计的?
- 无法控制其代码部署位置的开源开发者(例如,Magento模块开发者)。
- 其代码可能被部署在具有过时或不可预测位置的CACert包的奇怪环境中的个人。
- 通常被迫在以下两者之间做出选择
- 完全禁用证书验证,或者
- 增加他们的支持负担以处理突然在奇怪的系统上失败的HTTP请求的边缘情况
Certainty允许您的软件“正常工作”(这通常是禁用证书验证的动机),同时不会容易受到中间人攻击。
动机
许多HTTP库要求您指定一个指向cacert.pem
文件的文件路径,才能正确使用TLS。省略此文件意味着完全禁用证书验证(这将启用简单的中间人利用),连接失败,或者希望您的库安全地回退到操作系统的包。
简而言之,可能的结果(从最佳到最差)如下
- 指定一个cacert文件,您就可以享受TLS的预期功能。(安全。)
- 省略一个cacert文件,操作系统可能帮助您解决问题。(不确定。)
- 省略一个cacert文件,它将关闭。(连接失败。愤怒的客户。)
- 省略一个cacert文件,它将打开。(数据泄露。伤害客户。昂贵的法律诉讼。)
显然,第一个结果是最佳的。因此,我们构建了Certainty,使其更容易确保开源项目这样做。
安装Certainty
通过Composer
composer require paragonie/certainty:^2
Certainty将通过RemoteFetch
保持证书的最新状态,因此您无需仅为了获取新的CA-Cert包而更新Certainty库。仅更新错误修复(特别是安全修复)和新功能。
不受支持的用例
如果您没有使用RemoteFetch
(我们强烈建议您这样做,我们只为使用RemoteFetch
的系统提供支持),那么您想使用dev-master
而不是版本约束,因为CA证书的性质。
如果主要的CA被破坏并且他们的证书被吊销,您不想继续信任这些证书。
此外,在避免RemoteFetch
的情况下,您应该每周至少运行一次composer update
,以防止过时的CA-Cert文件导致问题。
使用Certainty
请参阅文档。
Certainty的作用
自2017年以来,Certainty维护了一个所有cacert.pem
文件的存储库,以及每个文件的sha256sum和Ed25519签名。当你请求最新版本时,Certainty将检查JSON值中每个条目的这两个值(后者只能由Paragon Initiative Enterprises, LLC持有的密钥签名),并返回通过验证的最新版本。
包含在这些文件中的cacert.pem文件可从Mozilla的版本中重现。
Certainty与composer/ca-bundle有何不同?
主要区别包括
- Certainty会确保即使在未运行
composer update
的情况下,你的系统中的CA-Cert版本包也能保持最新。 - 我们使用Ed25519对我们的CA-Cert版本包进行签名,并将每个更新检查到PHP社区编年史。
支持合同
如果你的公司在其产品或服务中使用此库,你可能对从Paragon Initiative Enterprises购买支持合同感兴趣。