用于检查SSL的函数加载时间过长



我有一个函数,可以检查ssl在域上是否正常工作,我在这里找到了这个函数。

function has_ssl($domain)
{
$ssl_check = fsockopen('ssl://' . $domain, 443, $errno, $errstr, 1000);
$res = !!$ssl_check;
if ($res == 1) {
return true;
} else {
return false;
}
}

我正在寻找一个替代函数,因为这个函数加载时间太长,而且当我必须检查数百个域的ssl时,它也会导致服务器超时错误。如果有人能给我一个替代功能,那就太好了。

我很乐意提供帮助!

首先,定义一个获取ssl证书信息的函数:

function get_cert_info($domain){
$context = stream_context_create(['ssl' => [
'capture_peer_cert' => true,
'capture_peer_cert_chain' => true,
],
]);
$client = stream_socket_client("ssl://".$domain.":443", $errno, $errstr, 30, STREAM_CLIENT_CONNECT, $context);
if($client==false) {
return false;
}
$params = stream_context_get_params($client);
$cert = $params['options']['ssl']['peer_certificate'];
$cert_info = openssl_x509_parse($cert);
return $cert_info;
}

然后用它来检查像这样的户籍:

$domain = 'example.com';
$cert_info = get_cert_info($domain);
$validTo_time_t = $cert_info['validTo_time_t'];
$validTo_time_d = date('Y-m-d H:i:s', $validTo_time_t);
if($validTo_time_d>date('Y-m-d H:i:s',now())) echo "true";
else echo "false";

此外,我刚刚在代码中检查了时间。

您可以查看其他信息,如:证书发布者,证书发布时间

希望它能起作用!

祝你今天过得愉快!

您的超时时间太长,可能15秒就足够了(高于这个值意味着无论如何都有问题(。此外,为了实现可扩展性,您需要一些多任务处理方式。我喜欢在这类任务中使用并行。

最新更新