这是什么鬼?
自从我换了ECS,无垠旗下的各种项目也陆陆续续换成了HTTPS协议。然而,随着HTTPS使用越来越广泛,我手头的证书也越来越多。Let's的证书还好说嘛,可以搞自动续期,但各种CDN上的证书就难搞了...何况我在各大CDN服务商都有挂域名。我才懒得检查证书有效期嘞!So,我打算利用手头的技术搞点事情。
自动检查SSL证书情况!Yeah!Demo:无垠证书透明
让我们开始吧
如何获取证书信息让我纠结了很久。因为咱都知道你申请到的证书都是一坨乱码,直接读当然不行。一开始找到一个冷门的Python轮子结果并不支持Let's的证书,直接报不信任。花了老半天终于发现curl就自带检查emmmm
执行curl 你的URL -v
可以看到(一定要加https://)
但curl
不止会输出连接信息,还会输出下载到的全文到终端。很显然如果任由curl
把全文输出到终端非常不利于我们提取出我们需要的时间数据,何况这些是输出到stderr
的。因此我们需要把输出重定向到一个文件然后用cat+grep
控制输出。
所以咱这次不瞎扯了,直接上手程序。Python 3坠吼了!
# -*- coding:utf-8 -*- #依赖库只有一个:pymysql,记得安装 #需要一个MySQL数据库,数据库结构看代码下面的图 import subprocess import os import time import pymysql db = pymysql.connect("数据库地址","数据库用户名","数据库密码","数据库名") cursor = db.cursor() cursor.execute("SET NAMES utf8");#设置数据库连接字符集 websitelist = ['flyhigher.top','acdn.flyhigher.top'] #需要检查的域名列表,无需填写协议名,同时支持端口号。建议先在数据库里面添加相应数量的记录,每条记录仅需填写ID,因为我懒没在代码里处理 for i in range(len(websitelist)): comm1 = "curl https://"+websitelist[i]+" --connect-timeout 10 -v -s -o /dev/null 2>/tmp/ca.info ; cat /tmp/ca.info | grep 'start date: '" #利用curl检查证书开始时间,注意一下ca.info保存路径,connect-timeout可以控制超时时间,避免假死 out_bytes1 = subprocess.check_output(comm1, shell=True) out_text1 = out_bytes1.decode('utf-8') comm2 = "cat /tmp/ca.info | grep 'expire date: '" #检查证书到期时间 out_bytes2 = subprocess.check_output(comm2, shell=True) out_text2 = out_bytes2.decode('utf-8') comm3 = "cat /tmp/ca.info | grep 'issuer: '" #获取证书颁发机构 out_bytes3 = subprocess.check_output(comm3, shell=True) out_text3 = out_bytes3.decode('utf-8') os.system('rm -f /tmp/ca.info') sql = 'UPDATE 数据表名 SET domain = "'+websitelist[i]+'", check_time = "'+time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())+'", s_time = "'+time.strftime("%Y-%m-%d %H:%M:%S",time.strptime(out_text1[-25:-5],"%b %d %H:%M:%S %Y"))+'", e_time = "'+time.strftime("%Y-%m-%d %H:%M:%S",time.strptime(out_text2[-25:-5],"%b %d %H:%M:%S %Y"))+'", c_info = "'+out_text3[11:-1].replace('"', "'")+'" WHERE ID = '+str(i+1) #格式化时间及证书颁发机构名称,构造SQL查询 cursor.execute(sql) db.commit() time.sleep(1) #睡一会儿,免得太High db.close()
OK,注释都有了。只要把这段Python扔到服务器上,搞个定时任务每天跑一遍就行了,这就不赘述了。
数据库结构如下,if_s
是我用于判断敏感域名的字段,非敏感域名会被展示在前端页面。
然后呢
emmm数据都在数据库里了你还想干啥?如果有空可以搞个邮件提醒,或者像我一样做个前端展示页。记得去掉敏感域名就好。
稍后我可能会将其整理并作为一个完整的、带Web面板、支持邮件提醒的项目发布到Github上。
溜了溜了
发表回复