paragonie/certainty

证书颁发机构的最新、可验证的存储库

v2.9.0 2024-05-08 16:07 UTC

README

Build Status Latest Stable Version Latest Unstable Version License Downloads

自动化PHP项目的cacert.pem管理。 阅读介绍Certainty的博客文章

需要PHP 5.5或更高版本。 Certainty应在任何操作系统(包括Windows)上工作,尽管在Virtualbox共享文件夹中可能无法使用符号链接功能。

Certainty是为谁设计的?

  • 无法控制其代码部署位置的开源开发者(例如,Magento模块开发者)。
  • 其代码可能被部署在具有过时或不可预测位置的CACert包的奇怪环境中的个人。
  • 通常被迫在以下两者之间做出选择
    1. 完全禁用证书验证,或者
    2. 增加他们的支持负担以处理突然在奇怪的系统上失败的HTTP请求的边缘情况

Certainty允许您的软件“正常工作”(这通常是禁用证书验证的动机),同时不会容易受到中间人攻击。

动机

许多HTTP库要求您指定一个指向cacert.pem文件的文件路径,才能正确使用TLS。省略此文件意味着完全禁用证书验证(这将启用简单的中间人利用),连接失败,或者希望您的库安全地回退到操作系统的包。

简而言之,可能的结果(从最佳到最差)如下

  1. 指定一个cacert文件,您就可以享受TLS的预期功能。(安全。)
  2. 省略一个cacert文件,操作系统可能帮助您解决问题。(不确定。)
  3. 省略一个cacert文件,它将关闭。(连接失败。愤怒的客户。)
  4. 省略一个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购买支持合同感兴趣。