PHP开发者必备:spatie/ssl-certificate API完全参考手册
spatie/ssl-certificate 是一个功能强大的 PHP 类库,能让开发者轻松查询和验证 SSL 证书属性。无论是检查证书有效期、获取颁发者信息,还是验证域名覆盖范围,这个工具都能提供简洁高效的解决方案,是 PHP 开发者处理 SSL 证书相关任务的理想选择。
快速入门:安装与基础使用
一键安装步骤
通过 Composer 可以快速安装 spatie/ssl-certificate:
composer require spatie/ssl-certificate
最快创建证书实例方法
创建 SSL 证书实例有三种常用方式,适用于不同场景:
use Spatie\SslCertificate\SslCertificate;
// 从域名获取证书(最常用)
$certificate = SslCertificate::createForHostName('example.com');
// 从文件加载证书
$certificate = SslCertificate::createFromFile('/path/to/certificate.pem');
// 从字符串创建证书
$certificate = SslCertificate::createFromString($pemString);
核心功能 API 详解
证书有效性检查
检查证书是否过期
$isExpired = $certificate->isExpired(); // true/false
验证证书当前是否有效
// 基础有效性检查(时间范围)
$isValid = $certificate->isValid();
// 验证证书是否对特定域名有效
$isValidForDomain = $certificate->isValid('sub.example.com');
检查证书在指定日期前是否有效
use Carbon\Carbon;
// 检查证书是否至少在7天后仍然有效
$willBeValid = $certificate->isValidUntil(Carbon::now()->addDays(7));
证书日期信息
获取证书有效期天数
$daysUntilExpiry = $certificate->daysUntilExpirationDate(); // 剩余天数
$totalLifespan = $certificate->lifespanInDays(); // 总有效天数
获取证书时间戳
$validFrom = $certificate->validFromDate(); // Carbon实例
$expiresAt = $certificate->expirationDate(); // Carbon实例
echo "证书生效时间: " . $validFrom->format('Y-m-d H:i:s');
echo "证书过期时间: " . $expiresAt->format('Y-m-d H:i:s');
证书主体信息
获取证书域名信息
$mainDomain = $certificate->getDomain(); // 主域名
$allDomains = $certificate->getDomains(); // 所有域名(含SANs)
$additionalDomains = $certificate->getAdditionalDomains(); // 额外域名
检查证书是否包含特定域名
$hasDomain = $certificate->containsDomain('blog.example.com'); // true/false
获取颁发者与组织信息
$issuer = $certificate->getIssuer(); // 颁发机构(如 "Let's Encrypt Authority X3")
$organization = $certificate->getOrganization(); // 组织名称
证书安全属性
获取证书指纹
$fingerprint = $certificate->getFingerprint(); // 默认SHA1指纹
$sha256Fingerprint = $certificate->getFingerprintSha256(); // SHA256指纹
检查证书算法与密钥
$signatureAlgorithm = $certificate->getSignatureAlgorithm(); // 如 "RSA-SHA256"
$publicKeyAlgorithm = $certificate->getPublicKeyAlgorithm(); // 如 "RSA"
$keySize = $certificate->getPublicKeySize(); // 密钥长度(如 2048)
特殊证书类型检查
$isSelfSigned = $certificate->isSelfSigned(); // 是否自签名
$usesSha1 = $certificate->usesSha1Hash(); // 是否使用SHA1哈希(不安全)
$isPreCertificate = $certificate->isPreCertificate(); // 是否为预证书
高级使用技巧
自定义证书下载选项
通过流畅接口配置证书下载参数:
$certificate = SslCertificate::download()
->usingPort(443) // 指定端口
->fromIpAddress('192.168.1.1') // 指定IP地址
->withSocketContextOptions([/* 上下文选项 */])
->forHost('example.com');
处理无效证书
下载过期或无效证书(用于调试):
// 第三个参数设为false跳过证书验证
$invalidCertificate = SslCertificate::createForHostName(
'expired.example.com',
30, // 超时时间(秒)
false // 不验证证书有效性
);
证书数据序列化
将证书信息转换为数组或JSON:
$array = $certificate->toArray(); // 转换为数组
$json = $certificate->getRawCertificateFieldsJson(); // 获取原始JSON
异常处理
该库定义了多个异常类,位于 src/Exceptions/ 目录,主要包括:
InvalidUrl- 当提供的URL无效时抛出InvalidIpAddress- 当IP地址格式错误时抛出CouldNotDownloadCertificate- 证书下载失败时抛出(含子异常)
使用示例:
try {
$certificate = SslCertificate::createForHostName('invalid-url');
} catch (InvalidUrl $e) {
echo "错误: " . $e->getMessage();
}
测试与验证
项目提供了完整的测试套件,位于 tests/ 目录,可通过以下命令运行:
composer test
测试涵盖了证书解析、域名验证、日期计算等核心功能,确保代码可靠性。
总结
spatie/ssl-certificate 为 PHP 开发者提供了一套直观、强大的 API 来处理 SSL 证书相关任务。无论是构建证书监控工具、实现域名验证功能,还是进行安全审计,这个库都能显著简化开发流程。通过本文介绍的方法,你可以快速掌握其核心功能,并将其灵活应用到实际项目中。
想要深入了解更多细节,可以查看项目源代码,主要功能实现位于 src/SslCertificate.php 和 src/Downloader.php 文件中。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



