补充个python监控小函数,证书过期发送警告

背景

现网发生过几次证书过期发生的业务中断,老这样搞不太好,于是决定在原有监控脚本基础上增加监控项,提前指定时间发送短信给维护人员

问题

现有证书主要就是一些提供https连接用的,有keystore文件,有.crm文件,也有pem文件,所以获取到期时间的命令有所不同,如下:

Test:/home/xia/tomcat/conf # keytool -list -v -keystore key.store -storepass 'xxx' |grep CST 
Valid from: Fri Feb 21 08:00:00 CST 2014 until: Sun Feb 22 07:59:59 CST 2015
Valid from: Tue Aug 28 04:40:40 CST 2012 until: Sat May 21 04:40:40 CST 2022
Valid from: Sun Aug 23 00:41:51 CST 1998 until: Thu Aug 23 00:41:51 CST 2018

Test:/usr/local/apache2/conf # openssl x509 -enddate -noout -in caiyun.feixin.10086.cn.crt 
notAfter=Feb 21 23:59:59 2015 GMT


现网目前的监控是用python实现的,时间处理采用date.ctime()方法(主要是awk分割可读性貌似差了点),ctime获取的格式如下:

Fri Jun 06 17:31:56 2014

openssl获取的没有周(考虑到反正不用周几,就随机用Fri去填充),keytool或取的CST在中间(用awk分割,需要考虑语言不同的可移植性问题)

成品

        certification_dir = self.getStrFromConfigIni("CertificateFile",item_name,"/home/X/key.store")
        before_days = self.getIntFromConfigIni("BeforeDays",item_name,15)
        if self.com_name == "A" :
            store_pass = self.getStrFromConfigIni("StorePass",item_name,"123456")
            get_date_cmd = """keytool -list -v -keystore %s -storepass '%s' |grep CST | head -n 1 |awk -F "," '{print substr($1,49,20),substr($1,73,4)}'""" % (certification_dir,store_pass)
            status,expire_time = lib.getOrderResultByCommands('root',get_date_cmd)
        elif self.com_name == "B" :
            get_date_cmd = """openssl x509 -enddate -noout -in %s | awk -F "," '{print substr($1,10,20)}'""" % (certification_dir)
            #...
        
        now=time.ctime()
        parsed_expire=time.strptime(expire_time)
        
        expire_date=datetime.date(parsed_expire.tm_year,parsed_expire.tm_mon,parsed_expire.tm_mday)
        #...
        delta = expire_date-now_date
        #send alarm

说明

1.grep CST后会获取到多个,只取第一个则head -n 1,同理,末尾用tail;
2.都指定root用户执行,因为现网有的用户语言LANG=zh_CN.UTF-8;
3.这个配合自己产品,比如读取配置执行命令,自己的库,看的童鞋就不要参考了。

没有更多推荐了,返回首页