您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > php

用PHP做SSL 证书到期时间检测,单文件 附源码

时间:2019-09-10 13:07:18  来源:  作者:
用PHP做SSL 证书到期时间检测,单文件 附源码

 

 

SSL Expire Scan

SSL 证书到期时间检测,使用 php 开发,需要安装 OpenSSL 扩展

有啥用呢?

提前提醒下,续签,防止忘记

使用方法

将项目 clone 到本地,然后在命令行输入

php main.php /path/to/ssl/directory/

示例(扫描 Nginx 的 SSL 目录下所有证书到期时间)

php main.php /usr/local/nginx/conf/ssl/

也可以对指定证书的到期时间进行扫描

php main.php /usr/local/nginx/conf/ssl/natfrp.org.crt

可以将以下内容加入到 /etc/bashrc 以方便随时使用:

alias sslscan='php /path/to/main.php'

源码

<?php
/**
*
* SSL Expire Scan Tool by Akkariin
*
* 本代码使用 GPL v3 协议开源
*
*/
$logo = <<<EOF
____ ____ _ _____ _
/ ___/ ___|| | |_ _|__ ___ | |
___ ___ | | | |/ _ / _ | |
___) |__) | |___ | | (_) | (_) | |
|____/____/|_____| |_|___/ ___/|_|
EOF;
// 获取 SSL 证书到期时间
function get_ssl_expire_time($file) {
$cert = openssl_x509_parse(file_get_contents($file));
return $cert['validTo_time_t'] ?? 0;
}
// 扫描目录下的所有 SSL 证书
function scan_ssl_files($dir, $extensionName = "crt") {
if(!file_exists($dir)) return Array();
if(is_file($dir)) return Array(basename($dir) => get_ssl_expire_time($dir));
$abspath = realpath($dir);
$expiretime = Array();
if($abspath) {
  $list = scandir($dir);
  foreach($list as $file) {
   if($file !== "." && $file !== "..") {
    $ext = pathinfo("{$dir}{$file}");
    if($ext['extension'] == $extensionName) {
     $expiretime["{$file}"] = get_ssl_expire_time("{$dir}{$file}");
    }
   }
  }
}
return $expiretime;
}
// 程序开始
echo $logo;
echo "SSL expire time scan tool by Akkariinn";
if($argv[1] == "--help" || !isset($argv[1])) {
exit("Usage: php {$argv[0]} <Directory or File> [extension name]nn");
}
// 参数存到变量
$scanpath = $argv[1] ?? "/usr/local/nginx/conf/ssl/";
$scanexts = $argv[2] ?? "crt";
// 扫描 SSL 证书
$exps = scan_ssl_files($scanpath, $scanexts);
if(count($exps) == 0) {
echo "未扫描到 SSL 证书,请检查目录是否存在,以及目录下是否有证书文件n";
}
// 获取最长的域名
$max_length = 0;
foreach($exps as $key => $value) {
if(mb_strwidth($key) > $max_length) {
  $max_length = mb_strwidth($key);
}
}
// 输出内容
$result = "";
$line_length = 0;
$time_length = 0;
// 遍历数组
foreach($exps as $key => $value) {
$expired = "正常";
$exptime = $value - time();
$dateime = $value !== 0 ? date("Y-m-d H:i:s", $value) : "无效的证书";
$padding = str_repeat(" ", $max_length - mb_strwidth($key));
if($exptime <= 2592000 && $exptime > 0) {
  $expired = "一个月内将会过期";
} elseif($value == 0) {
  $expired = "无效";
} elseif($exptime < 0) {
  $expired = "已经过期";
}
if(mb_strwidth($dateime) > $time_length) {
  $time_length = mb_strwidth($dateime);
}
$padding2 = str_repeat(" ", 16 - mb_strwidth($expired));
$padding3 = str_repeat(" ", 19 - mb_strwidth($dateime));
$data = "| {$key}{$padding} | {$dateime}{$padding3} | {$expired}{$padding2} |";
$line_length = mb_strwidth($data);
$result .= $data . "n";
}
// 格式
echo "+-" . str_repeat("-", $max_length) . "-+-" . str_repeat("-", $time_length) . "-+------------------+n";
echo "| 名称" . str_repeat(" ", $max_length - 4) . " | 到期时间" . str_repeat(" ", $time_length - 8) . " | 证书状态 |n";
echo "+-" . str_repeat("-", $max_length) . "-+-" . str_repeat("-", $time_length) . "-+------------------+n";
echo $result;
echo "+-" . str_repeat("-", $max_length) . "-+-" . str_repeat("-", $time_length) . "-+------------------+nn";

更多更优质的资讯,请关注我,你的支持会鼓励我不断分享更多更好的优质文章。



Tags:PHP   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
网络地址来源:获取公网IP地址 https://ipip.yy.com/get_ip_info.phphttp://pv.sohu.com/cityjson?ie=utf-8http://www.ip168.com/json.do?view=myipaddress...【详细内容】
2021-12-15  Tags: PHP  点击:(15)  评论:(0)  加入收藏
一、编程语言1.根据熟悉的语言,谈谈两种语言的区别?主要浅谈下C/C++和PHP语言的区别:1)PHP弱类型语言,一种脚本语言,对数据的类型不要求过多,较多的应用于Web应用开发,现在好多互...【详细内容】
2021-12-15  Tags: PHP  点击:(17)  评论:(0)  加入收藏
序言:前段时间织梦因为版权的问题在网上闹得沸沸扬扬,也提醒了众多开发者选择cms上应该谨慎使用,今天给大家展示一款自己搭建的内容管理系统,不用担心版权的问题,而且非常容易维...【详细内容】
2021-11-30  Tags: PHP  点击:(34)  评论:(0)  加入收藏
序言:习惯了用集成软件来安装php的运行环境,单独配置php、apache成为了部分程序员不愿意面对的问题,下面和我一块来复习一下,赶紧点赞收藏吧。 php官方下载地址https://windows....【详细内容】
2021-11-23  Tags: PHP  点击:(24)  评论:(0)  加入收藏
准备安装包(PHP: Hypertext Preprocessor)下载安装包以及组件wget https://www.php.net/distributions/php-8.0.0.tar.bz2wget https://github.com/phpredis/phpredis/archive...【详细内容】
2021-11-09  Tags: PHP  点击:(40)  评论:(0)  加入收藏
golang context 很好用,就使用php实现了github地址 : https://github.com/qq1060656096/php-go-context context使用闭坑指南1. 将一个Context参数作为第一个参数传递给传入和...【详细内容】
2021-11-05  Tags: PHP  点击:(41)  评论:(0)  加入收藏
TechEmpower BenchmarkTechEmpower 的测试比较科学,包含 SQL 查询、JSON 序列化等各种测试,同时标注了哪些是使用了 ORM,哪些是 RAW 查询。 TechEmpower Benchmark Web Framew...【详细内容】
2021-10-12  Tags: PHP  点击:(71)  评论:(0)  加入收藏
一、背景介绍Pikachu是一个带有各种漏洞的Web应用系统,这个系统是使用PHP搭建的,需要PHP环境和Mysql数据库支持。我们可以利用phpstudy在本地搭建这个渗透测试平台,如果你是一...【详细内容】
2021-10-09  Tags: PHP  点击:(53)  评论:(0)  加入收藏
一段数组为例:$list = array:4 [ 0 => array:7 [ "id" => 56 "mer_id" => 7 "order_id" => "wx163265961408769974" "is_postage" => 0 "store_name" => "奇...【详细内容】
2021-09-29  Tags: PHP  点击:(65)  评论:(0)  加入收藏
利用JS的CryptoJS 3.x和PHP的openssl_encrypt,openssl_decrypt实现AES对称加密解密,由于需要两种语言对同一字符串的操作,而CryptoJS 的默认加密方式为“aes-256-cbc”,PHP端也...【详细内容】
2021-09-16  Tags: PHP  点击:(79)  评论:(0)  加入收藏
▌简易百科推荐
序言:前段时间织梦因为版权的问题在网上闹得沸沸扬扬,也提醒了众多开发者选择cms上应该谨慎使用,今天给大家展示一款自己搭建的内容管理系统,不用担心版权的问题,而且非常容易维...【详细内容】
2021-11-30  小程序软件开发    Tags:管理系统   点击:(34)  评论:(0)  加入收藏
准备安装包(PHP: Hypertext Preprocessor)下载安装包以及组件wget https://www.php.net/distributions/php-8.0.0.tar.bz2wget https://github.com/phpredis/phpredis/archive...【详细内容】
2021-11-09  mimic96    Tags:PHP   点击:(40)  评论:(0)  加入收藏
golang context 很好用,就使用php实现了github地址 : https://github.com/qq1060656096/php-go-context context使用闭坑指南1. 将一个Context参数作为第一个参数传递给传入和...【详细内容】
2021-11-05  1060656096    Tags:PHP   点击:(41)  评论:(0)  加入收藏
一段数组为例:$list = array:4 [ 0 => array:7 [ "id" => 56 "mer_id" => 7 "order_id" => "wx163265961408769974" "is_postage" => 0 "store_name" => "奇...【详细内容】
2021-09-29  七七小影视    Tags:PHP   点击:(65)  评论:(0)  加入收藏
利用JS的CryptoJS 3.x和PHP的openssl_encrypt,openssl_decrypt实现AES对称加密解密,由于需要两种语言对同一字符串的操作,而CryptoJS 的默认加密方式为“aes-256-cbc”,PHP端也...【详细内容】
2021-09-16  李老师tome    Tags:对称加密   点击:(79)  评论:(0)  加入收藏
1、checkdate()验证格利高里日期即:日期是否存在。checkdate(month,day,year);month必需。一个从 1 到 12 的数字,规定月。day必需。一个从 1 到 31 的数字,规定日。year必需。...【详细内容】
2021-08-31  七七小影视    Tags:时间函数   点击:(80)  评论:(0)  加入收藏
对于各类开发语言来说,整数都有一个最大的位数,如果超过位数就无法显示或者操作了。其实,这也是一种精度越界之后产生的精度丢失问题。在我们的 PHP 代码中,最大的整数非常大,我...【详细内容】
2021-08-26  硬核项目经理    Tags:PHP   点击:(83)  评论:(0)  加入收藏
遵从所有教材以及各类数据结构相关的书书籍,我们先从线性表开始入门。今天这篇文章更偏概念,是关于有线性表的一个知识点的汇总。上文说过,物理结构是用于确定数据以何种方式存...【详细内容】
2021-07-19  硬核项目经理    Tags:线性表   点击:(94)  评论:(0)  加入收藏
一、开启IIS全部功能。二、部署PHP1.官网下载并解压PHP: https://windows.php.net/downloads/releases/2.将php.ini-development文件改为php.ini3.修改php.ini(1)去掉注释,并修...【详细内容】
2021-07-15  炘蓝火诗  今日头条  Tags:PHP环境   点击:(129)  评论:(0)  加入收藏
一、环境说明本文中使用本地VM虚机部署测试。OS:CentOS Linux release 7.8.2003 (Core)虚机配置:2核CPU、4G内存①系统为CentOS 7.8 x64最小化安装,部署前已完成系统初始化、...【详细内容】
2021-06-25  IT运维笔记  今日头条  Tags:PHP8.0.7   点击:(141)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条