python3 计算SSL 证书过期时间

计算网站SSL证书距离当前还有多少天过期

配合 config.py 以列表的形式传输需要检测域名到脚本中

 

1. 检测脚本


# -*- coding: utf-8 -*-

"""
1. 此脚本为检测域名的SSL证书过期时间,距离当前时间还有多久。
2. 此脚本需要配合 config.py 使用,config.py 里面是以列表的形式写入需要检测的域名。
"""

import socket
import ssl
import datetime
import time
import config
import logging


def get_domain_cert(domain):
socket.setdefaulttimeout(5)

cxt = ssl.create_default_context()
skt = cxt.wrap_socket(socket.socket(),server_hostname=domain)

skt.connect((domain,443))
cert = skt.getpeercert()

# 获取证书结束的GMT时间
end_time = cert["notAfter"]

# 关闭socket连接
skt.close()

# 返回证书过期时间,返回的是GMT时间
return end_time


def get_end_time(end_time,domain):
# 将证书到期时间转换常规可读的时间,还是GMT时间
GMT_FORMAT = '%b %d %H:%M:%S %Y GMT'
GMT_TIME = datetime.datetime.strptime(end_time, GMT_FORMAT)
# 将证书到期转换成东 8 区的时间
East_8th_District = GMT_TIME + datetime.timedelta(hours=8)
print("域名:%s 的证书到期时间:%s" %(domain,East_8th_District))

# 将结束时间转换成时间戳,预备以后做计算,小于多少天报警。
end_time_stamp = time.mktime(East_8th_District.timetuple())
now_time_stamp = time.time()

# 算出证书过期的天数
time_difference = end_time_stamp - now_time_stamp
# 将时间戳转换成天数
days = ("%.2f" % (time_difference / 60 / 60 / 24))
return days

if __name__ == '__main__':
print("检测时间:%s" % time.strftime('%Y-%m-%d %H:%M:%S'))
for i in config.server_list:
try:
end_time = get_domain_cert(i)
except:
logging.error("请检查域名:%s 是否正确。 该域名否使用SSL证书,或者域名填写错误。\n" % i)
else:
days = get_end_time(end_time, i)
print("域名:%s 的证书过期离当前时间还有:%s 天。\n" %(i, days))

 

 

2. config.py 配置文件

# -*- coding: utf-8 -*-

# 以列表的方式写入需要检测的域名

server_list = [
    "www.baidu.com",
    "www.taobao.com",
    "www.jd.com",
    "192.168.11.118:10086",
    "www.cnblogs.com"
]

  

3. 运行 ssl_check.py 的结果

 

 

 

使用 logging.error 方法,自定义输出异常的报错,方便在日志中查询。

posted @ 2022-11-08 19:14  江戸川のコナン  阅读(689)  评论(3编辑  收藏  举报
……