互联网安全越来越受到企业重视,https证书也成为各个公司必备,但是域名过多、系统复杂、证书不一致、过期给证书安装、替换增加了很大的困难,基于此,本文编写了证书检测程序,进行常态化监控证书情况
操作环境:python2.7
依赖包:ssl, socket
这里是关于证书的一个最新消息:
从2020年9月1日起,苹果系统、谷歌和火狐浏览器计划调整受信SSL证书的有效期策略,上述系统或浏览器中受信SSL证书的最长有效期将从825天缩短至398天。对此,各CA厂商也将缩短SSL证书的最长有效期。
脚本分为两个文件,一个域名配置文件、一个检测程序,
配置文件domain.txt,域名写入该配置文件,每行一个域名
www.xxx.com
123.xxx.com
1231.xxx.com
123.xxx.com
代码
#!/usr/bin/env python
#-*- coding:utf-8 -*-
import ssl, socket
import json
import time
import datetime
socket.setdefaulttimeout(5)
def check_ssl(domain):
try:
hostname = domain
c = ssl.create_default_context()
s = c.wrap_socket(socket.socket(), server_hostname=hostname)
s.connect((hostname, 443))
cert = s.getpeercert()
now_time = (datetime.datetime.now()+datetime.timedelta(days=3)).strftime("%b %d %H:%M:%S %Y GMT")
now_times = time.mktime(time.strptime(now_time, "%b %d %H:%M:%S %Y GMT"))
real_time=time.mktime(time.strptime(cert['notAfter'], "%b %d %H:%M:%S %Y GMT"))
#比较证书是否过期
if now_times < real_time:
print "证书未过期"
else:
print "证书已过期,过期时间:"+cert['notAfter']
#比较证书时间
print cert['notAfter']+"--->"+hostname
#假设Jul 01 12:00:00 2020 GMT到期
if "Jul 01 12:00:00 2020 GMT" != cert['notAfter']:
print "证书与预估时间不一致--->" + hostname +"<------"+ cert['notAfter']
except Exception,err:
print "Exception-->\n"+hostname+str(err)
if __name__ == '__main__':
with open("/home/domain.txt", "r") as f:
for line in f.readlines():
line = line.strip('\n')
check_ssl(line)