帖子详情
担心证书过期,挂宝塔计划任务,然后,再加邮件提醒避免证书过期不知道。
下面是一个php代码
<?phperror_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,// 兼容全版本TLSCURLOPT_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.mianfeicms.com’;$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} 天”;}?>
版权:言论仅代表个人观点,不代表官方立场。转载请注明出处:https://www.mianfeicms.com/forum/11353.html
