stayallive/certificate-chain-resolver

证书链解析器。

v1.0.2 2022-03-29 19:23 UTC

This package is auto-updated.

Last update: 2024-09-04 12:49:15 UTC


README

Latest Version Software License Build Status Total Downloads

通过简单的用户界面解析证书链。

使用此包的托管版本可在此处找到: chief.tools/certificate-chain-resolver.

安装

composer require stayallive/certificate-chain-resolver

用法

您可以使用 Resolver::fetchForCertificate 获取完整的 PEM 编码链作为字符串。

$output = \Stayallive\CertificateChain\Resolver::fetchForCertificate(
    \Stayallive\CertificateChain\Certificate::loadFromPathOrUrl('path/to/certificate.pem')
);

您可以使用 Certificate::loadFromPathOrUrl 获取您用于构建 Resolver 实例所需的 Certificate 实例。

证书是通过 file_get_contents 获取的,因此任何支持 file_get_contents 的路径或 URL 都应该可以工作。

证书可以是多种格式和编码,目前支持:PEM、DER 和 PKCS7,它们都被转换为 PEM 编码。

如果您需要不带原始证书的链或要获取表示链的 Certificate 实例数组,您可以直接使用 Resolver

$chain = new \Stayallive\CertificateChain\Resolver(
    \Stayallive\CertificateChain\Certificate::loadFromPathOrUrl('path/to/certificate.pem')
);

$chain->getContents(); // Same as `Resolver::fetchForCertificate`, returns a string
$chain->getCertificates(); // Array of certificates in the chain, returns an array

// Versions that do not include the certificate that was used to construct the `Resolver` with
$chain->getContentsWithoutOriginal();
$chain->getCertificatesWithoutOriginal();

在检索证书或其链时可能会抛出两种可能的异常,它们都扩展了 ResolverException

  • CouldNotLoadCertificate - 这表示从 URL 或路径获取证书失败
  • CouldNotParseCertificate - 这表示解析获取的证书失败,因为它无效或其编码不受支持

背景:信任链

所有操作系统都包含一组默认受信任的根证书。但是证书颁发机构通常不使用其根证书来签发客户证书。相反,它们使用所谓的中间证书,因为它们可以更频繁地轮换。

证书可以包含一个特殊的权威信息访问扩展 (RFC-3280),其中包含发行者证书的 URL。大多数浏览器可以使用 AIA 扩展下载缺失的中间证书以完成证书链。这就是“额外下载”消息的确切含义。但是,某些客户端,主要是移动浏览器,不支持此扩展,因此它们将此类证书报告为不受信任。

这导致“不受信任”警告,因为浏览器认为您正在不安全的连接上。

服务器应始终发送完整的链,这意味着从证书到受信任的根证书(不包括,按此顺序)的所有证书的连接,以防止此类问题。因此,在服务器上安装 SSL 证书时,您应同时安装所有中间证书。您应该能够从发行者那里获取中间证书并将它们连接起来。

此包通过遍历证书的 AIA 扩展字段并返回完整的链来自动化这个枯燥的任务。

致谢

此包最初是作为 ssl-certificate-chain-resolver 的分支创建的,该分支由 Spatie 编写,该分支受 cert-chain-resolver 的启发,该分支由 Jan Žák 编写。一些文本,主要是关于信任链的背景,是从他的存储库的说明中复制的。

安全漏洞

如果在该软件包中发现安全漏洞,请将电子邮件发送至Alex Bouma,邮箱地址为alex+security@bouma.me。所有安全漏洞都将得到迅速处理。

许可证

该软件包是开源软件,遵循MIT许可证