除了自动续费SSL以外,还担心证书过期,用 AI 写个 PHP 代码,挂宝塔计划任务,然后,再加邮件提醒就行了。
<?php
error_reporting(0);
header('Content-type:text/html;charset=utf-8');
date_default_timezone_set('Asia/Shanghai');
/**
* curl方式获取SSL证书剩余天数
* @param string $domain 纯域名,不带http/https
* @param int $port
* @param int $timeout
* @return int|bool false=失败,int剩余天数(负数=过期)
*/
function sslRemainDays($domain, $port = 443, $timeout = 3)
{
// 环境检测
if (!extension_loaded('curl') || !extension_loaded('openssl')) {
return false;
}
// 清洗域名
$domain = trim(str_replace(['https://', 'http://'], '', $domain));
if (!empty($domain)){
if (strpos($domain, '?') !== false) {$domain = strstr($domain, '?', true);}
if (strpos($domain, '/') !== false) {$domain = strstr($domain, '/', true);}
}
if (empty($domain)) {return false;}
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL => "https://{$domain}:{$port}",
CURLOPT_PORT => $port,
CURLOPT_TIMEOUT => $timeout,
CURLOPT_CONNECTTIMEOUT => $timeout,
// 完全关闭SSL证书验证(你要的跳过校验)
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_SSL_VERIFYHOST => 0,
// 强制抓取完整证书链
CURLOPT_CERTINFO => true,
// 不输出页面内容,只拿握手信息
CURLOPT_NOBODY => true,
CURLOPT_FOLLOWLOCATION => false,
// 携带SNI,解决多证书主机
//CURLOPT_SSL_HOSTNAME => $domain,
// 兼容全版本TLS
CURLOPT_SSLVERSION => CURL_SSLVERSION_TLSv1_2
]);
// 执行请求
$res = curl_exec($ch);
$certInfoList = curl_getinfo($ch, CURLINFO_CERTINFO);
$curlErr = curl_errno($ch);
curl_close($ch);
// curl握手失败
if ($curlErr !== 0 || empty($certInfoList)) {
return false;
}
// 取服务器主证书
$certRaw = $certInfoList[0]['Cert'];
$certData = openssl_x509_parse($certRaw);
if (empty($certData['validTo_time_t'])) return false;
$diffSec = $certData['validTo_time_t'] - time();
$remainDays = ceil($diffSec / 86400);
return intval($remainDays);
}
// 测试
$domain = 'www.260.cn';
$days = sslRemainDays($domain);
if ($days === false) {
echo '证书查询失败:curl/openssl扩展缺失、网络443不通或站点TLS握手被拒绝';
} elseif ($days < 0) {
echo "【警告】证书已过期,过期" . abs($days) . "天,请立即更换!";
} elseif ($days <= 5) {
echo "【紧急提醒】证书仅剩 {$days} 天到期,尽快申请新证书!";
} else {
echo "证书剩余 {$days} 天";
}
?>
这个是AI写的源码,加上邮件提示,或者封装起来作为API使用也可以。
感谢优质内容,用金币表达支持。同一主题仅可打赏一次。
我的金币: 0