liquidweb / ssl-certificate
一个类,可以轻松查询SSL证书的属性并验证其状态
Requires
- php: ^7.3|^8.0
- ext-filter: *
- ext-mbstring: *
- ext-openssl: *
- league/uri: ^5.3.0
- nesbot/carbon: ^1.39.1|^2.0
- phpseclib/phpseclib: ^2.0.6
Requires (Dev)
- brianium/paratest: ^6.2
- composer/package-versions-deprecated: 1.11.99.1
- phpstan/phpstan: ^0.12.77
- phpunit/phpunit: ^9.5.2
- roave/security-advisories: dev-master
Suggests
- ext-gmp: This helps to speed up the phpseclib functions, highly suggested while not required.
- dev-master
- 2.5.6
- 2.5.5
- 2.5.4
- 2.5.3
- 2.5.2
- 2.5.1
- 2.5.0
- 2.4.2
- 2.4.1
- 2.4.0
- 2.3.6
- 2.3.5
- 2.3.4
- 2.3.3
- 2.3.1
- 2.3.0
- 2.2.2
- 2.2.1
- 2.1.1
- 2.1.0
- 2.0.1
- 2.0.0
- 1.1.3
- 1.0.1
- 1.0.0
- dev-update-league-uri
- dev-analysis-qxpLPy
- dev-analysis-qyLYPL
- dev-analysis-8w9WZK
- dev-analysis-XVo4OD
- dev-fixDateMethod
- dev-self-signed-test
- dev-analysis-X0y6gw
- dev-analysis-qBdvE9
- dev-analysis-qg7AOE
- dev-ci-improvements
- dev-travis-test
This package is auto-updated.
Last update: 2024-08-29 03:58:10 UTC
README
此包受spatie/ssl-certificate原始SSL证书数据验证和查询类的启发,并从中衍生而来。此包与原始类的主要区别在于验证范围和目标。此包在原始类的基础上对SSL证书验证进行了进一步的扩展。
此变体能够检测ssl是否
- 在浏览器中被信任,
- 与测试的域名匹配,
- 在一般意义上有效,
- 提供附加链,
- 以及SSL是否被CRL吊销。
此外,此包还跟踪并提供查看SSL链信息的 方法。
以下是一些示例
$certificate = SslCertificate::createForHostName('liquidweb.com'); // Basic SSL test $certificateWithCrl = SslCertificate::createForHostName('liquidweb.com')->withSslCrlCheck(); // SSL test with CRL checks $certificate->getIssuer(); // returns "GlobalSign Extended Validation CA - SHA256 - G2" $certificate->isValid(); // returns true if the certificate is currently valid $certificate->isTrusted(); // returns true if the certificate is trusted by default $certificate->hasSslChain(); // returns bool of ssl chain status $certificate->expirationDate(); // returns an instance of Carbon $certificate->expirationDate()->diffInDays(); // returns an int $certificate->getSignatureAlgorithm(); // returns a string $certificate->getSerialNumber(); // returns a string // methods that require CRL test $certificateWithCrl->isRevoked(); // returns bool of revoked status, or null if no list provided $certificateWithCrl->getCrlRevokedTime(); // returns a Carbon instance of the CRL revocation time $certificateWithCrl->isValid(); // results may vary from `certificate` if the SSL is CRL revoked $certificateWithCrl->isTrusted(); // results may vary from `certificate` if the SSL is CRL revoked
安装
您可以通过composer安装此包
composer require liquidweb/ssl-certificate
虽然不是必需的,但强烈建议安装PHP gmp扩展,因为这将有助于加速CRL验证方法。这是因为phpseclib用于处理CRL列表中ASN1序列的解码和比较。
使用
您可以使用以下命名构造函数创建LiquidWeb\SslCertificate\SslCertificate
的实例
$certificate = SslCertificate::createForHostName('liquidweb.com');
如果给定的hostName
无效,将抛出LiquidWeb\SslCertificate\InvalidUrl
。
如果给定的hostName
有效但下载证书存在问题,将抛出LiquidWeb\SslCertificate\CouldNotDownloadCertificate
。
获取颁发者名称
$certificate->getIssuer(); // returns "GlobalSign Extended Validation CA - SHA256 - G2"
获取域名
获取域名可以通过两种方式之一完成;您可以使用getDomain
或getCertificateDomain
。它们非常相似,但在细微之处有所不同。
$certificate->getDomain(); // returns "www.liquidweb.com"
返回用户输入的域名,或证书的主要域名。这种动态的结果风格有助于解决CloudFlare SSL的问题。如果证书的主要域名与输入域名完全不相似,则此方法返回输入域名。
$certificate->getCertificateDomain(); // returns "www.liquidweb.com"
返回证书的主要域名;这将始终且仅返回SSL的主题CN。
获取证书的签名算法
返回用于签名证书的算法
$certificate->getSignatureAlgorithm(); // returns "RSA-SHA256"
获取附加域名
证书可以涵盖多个(子)域名。以下是如何获取它们的方法。
$certificate->getAdditionalDomains(); // returns [ "www.liquidweb.com", "www.stormondemand.com", "www.sonet7.com", "manage.stormondemand.com", "manage.liquidweb.com", "liquidweb.com" ]
此方法返回的域名名称可以以*
开头,这意味着它适用于该域的所有子域名。
获取证书生效的日期
$certificate->validFromDate(); // returns an instance of Carbon
获取到期日期
$certificate->expirationDate(); // returns an instance of Carbon
确定证书是否仍然有效
如果SSL对域名有效、默认信任且未过期,则返回true。
如果域名是主要主题或SAN,则SSL对提供的域名有效。信任状态根据SSL的下载方式确定;如果不需要cURL ssl验证,则不受信任。如果当前日期和时间在validFromDate
和expirationDate
之间,则找到有效的到期状态。
$certificate->isValid(); // returns a boolean
您还可以使用此方法确定给定的域名是否被证书涵盖。当然,它将继续检查当前日期和时间是否在validFromDate
和expirationDate
之间。
$certificate->isValid('liquidweb.com'); // returns true; $certificate->isValid('spatie.be'); // returns false;
确定证书直到给定日期是否仍然有效
如果给定日期在证书的有效期内,则返回true。SSL可能因其他原因而无效,这仅仅是再次检查SSL的validFromDate
和expirationDate
日期。
$certificate->isValidDate(Carbon::create('2017', '03', '30', '12', '00', '00', 'utc')); // returns a boolean
确定证书是否在给定日期之前仍然有效,并确保它是有效的SSL
如果证书有效且expirationDate
在给定日期之前,则返回true。
$certificate->isValidUntil(Carbon::now()->addDays(7)); // returns a boolean
确定证书是否已过期
$certificate->isExpired(); // returns a boolean if expired
确定证书是否已被吊销
$certificate = SslCertificate::createForHostName('liquidweb.com')->withSslCrlCheck(); $certificate->isRevoked();
变更日志
请参阅变更日志获取有关最近变更的更多信息。
测试
$ composer test
注意:在测试此库的实现时,可以使用BadSSL模拟各种SSL场景。
致谢
- Dan Pock - 分支创建者与维护者
- Freek Van der Herten - 原始包创建者
- 所有贡献者
辅助函数和测试是从Laravel框架复制的。
许可证
MIT许可证(MIT)。有关更多信息,请参阅许可证文件。