首页 > 其他分享 >监控证书有效期

监控证书有效期

时间:2024-10-08 12:12:19浏览次数:7  
标签:domain 有效期 证书 list per ssl result 监控 check

脚本监控域名证书有效期,超过60天邮件通知
脚本路径:
/opt/domain_script
-check_public_domain_ssl.py
-check_ssl_data #域名证书检查结果文件目录
-domain_datasource #扫描域名列表目录
-logs #记录日志

]$ cat /opt/domain_script/domain_datasource/public_domain_list
www.baidu.com
...

脚本:

#!/bin/python
#-- coding:UTF-8 --

import smtplib
import os
from datetime import datetime
from datetime import date
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart

# date format
current_time = date.today().strftime('%Y-%m-%d')

#local file env
internal_domain_list = '/opt/domain_script/domain_datasource/internal_domain_list'
domain_check_result = '/opt/domain_script/check_ssl_data/internal_domain_check_result.csv'
domain_checK_log = '/opt/domain_script/logs/internal_domain_check.log'

#mail notification
smtp_host = '10.0.0.1'
sendfrom = '[email protected]'
alertmaillist = ['[email protected]']
ccmaillist = []

def generate_html_mail(all_domain_check_result):
    html_result = ""
    for per_row_domain in all_domain_check_result:
        per_html_tr = '''
        <tr>
         <td> {} </td>
         <td> {} </td>
         <td> {} </td>
         <td> {} </td>
        </tr>
        '''.format(per_row_domain[0],per_row_domain[1],per_row_domain[2],per_row_domain[3])
        html_result = html_result + per_html_tr

    message_css = """
    <style>
        #customers {
          font-family: Arial, Helvetica, sans-serif;
          border-collapse: collapse;
          width: 80%;
        }

        #customers td, #customers th {
          border: 1px solid #ddd;
          padding: 8px;
        }

        #customers tr:nth-child(even){background-color: #f2f2f2;}

        #customers tr:hover {background-color: #ddd;}

        #customers th {
          padding-top: 12px;
          padding-bottom: 12px;
          text-align: left;
          background-color: rgb(63,63,63);
          color: white;
          font-size: 14px;
        }
        #customers td {
          font-size: 12px;
          text-align: left;

        }

    </style>
    """

    message = """
    %s
      <p>Dear all,</p>
      <p></p>
      <p>Your monitoring domain name certificate is about to expire or has already expired.</p>
      <p></p>
      <table id="customers">
       <tbody>
        <tr>
         <th>Domain</th>
         <th>Common Name</th>
         <th>SSL Expire Time</th>
         <th>Expiration Days</th>
        </tr>

        %s
      </tbody>
      </table>
      <br />
      <br />
      <hr>
      <p>
        Note: Please update the certificates for the monitoring domain names mentioned above in a timely manner to prevent certificate expiration.
      </p>
        <br>
    """%(message_css,html_result)

    return message

def sendmail(all_domain_check_result):
    '''send alert mail'''
    try:
        title = '[Internal Domain] Domain Certificate Expiration Alarm'
        if len(all_domain_check_result) > 0:
            content = generate_html_mail(all_domain_check_result)
        else:
            content = 'Dear all \n' + '    All internal domain name certificates are within their validity period. Please be informed. Thank you.\n'
        message = MIMEMultipart()
        msg_content = MIMEText(content, 'html', 'utf-8')
        message.attach(msg_content)
        message['Subject'] = title
        message['From'] = sendfrom
        message['To'] = ','.join(alertmaillist)
        message['Cc'] = ','.join(ccmaillist)

        att1 = MIMEText(open(domain_check_result, 'rb').read(), 'base64', 'utf-8')
        att1["Content-Type"] = 'application/octet-stream'
        att1["Content-Disposition"] = 'attachment; filename="Certificate_Expire_List.csv"'
        message.attach(att1)

        smtpObj = smtplib.SMTP()
        smtpObj.connect(smtp_host, 25)
        smtpObj.sendmail(
            sendfrom, alertmaillist + ccmaillist, message.as_string())
        smtpObj.quit()
        print('Alert Mail send success')
    except smtplib.SMTPException as e:
        print('Alert Mail send error', e)

def get_domain_list():
    """
    获取需要监控的域名列表
    """
    with open(internal_domain_list, mode='rt') as f:
        domain_pool = []
        for line in f:
            per_domain_list = []
            r_line = line.split()
            per_domain = r_line[0]
            per_domain_expire_time = r_line[1]
            per_domain_list.append(per_domain)
            per_domain_list.append(per_domain_expire_time.replace('\n',''))
            domain_pool.append(per_domain_list)
    return domain_pool

def get_diff_days(start_date, end_date):
    """
    获取两个时间对象的时间差天数
    """
    if start_date and end_date:
        delta = datetime.strptime(end_date, "%Y-%m-%d") - datetime.strptime(start_date, "%Y-%m-%d")
        return delta.days
    else:
        return 0

def get_ssl_cert(domainlist):
    """
    通过socket获取整数信息
    """
    per_domain_check_info = []
    try:
        expire_days = get_diff_days(current_time,domainlist[1])
        if 'cneb' in domainlist[0]:
            common_name = '*.cneb' + domainlist[0].split('cneb')[1]
        else:
            common_name = domainlist[0]
        per_domain_check_info.append(domainlist[0])
        per_domain_check_info.append(common_name)
        per_domain_check_info.append(domainlist[1])
        per_domain_check_info.append(expire_days)
    except Exception as e:
        err = e.__str__()
        log_info = 'Domain:[%s] Msg: [socket.timeout: timed out]'%(domainlist[0])
        domain_check_log(log_info)
        per_domain_check_info.append(domainlist[0])
        per_domain_check_info.append('Null')
        per_domain_check_info.append(None)
        per_domain_check_info.append(0)
    return per_domain_check_info

def domain_check_log(loginfo):
    """
    写日志到本地
    """
    with open(domain_checK_log, mode='a+') as f:
        log_date = datetime.now()
        f.write('%s %s \n'%(log_date,loginfo))

def write_excel(data):
    """
    把证书信息写到excel表中,后续邮件发送
    """
    with open(domain_check_result, mode='a+') as f:
        f.write(data)

def export_ssl_check_result(all_check_list):
    """
    把获取的证书信息写入表格中
    """
    write_excel('Domain,Common Name,SSL Expire Time,Expire_days\n')
    for per_ssl_check_result in all_check_list:
        #[u'wxbk.sephora.cn', u'sephora.cn', '2022-09-14', '2023-10-13', 28]
        datamsg = '%s,%s,%s,%s, \n'%(per_ssl_check_result[0],per_ssl_check_result[1],per_ssl_check_result[2],per_ssl_check_result[3])
        print(datamsg)
        write_excel(datamsg)

if __name__ == '__main__':
    internal_domain_poll = get_domain_list()
    all_domain_check_result = []
    for per_domain in internal_domain_poll:
        per_check_ssl_result = get_ssl_cert(per_domain)
        if per_check_ssl_result[3] <= 60:
            all_domain_check_result.append(per_check_ssl_result)

    if os.path.exists(domain_check_result):
        os.remove(domain_check_result)
    if len(all_domain_check_result) > 0:
        export_ssl_check_result(all_domain_check_result)
    sendmail(all_domain_check_result)

执行脚本:
~]# python3 check_public_domain_ssl.py

标签:domain,有效期,证书,list,per,ssl,result,监控,check
From: https://www.cnblogs.com/suixin7888/p/18451398

相关文章

  • 非煤矿山电子封条视频监控系统
    非煤矿山电子封条视频监控系统采用现场摄像头和图像分析终端等设备,非煤矿山电子封条视频监控系统通过对煤矿关键地点进行实时监测和数据分析。当有异常情况发生时,非煤矿山电子封条视频监控系统可以通过人工智能算法将自动识别异常情况并记录信息,及时通知现场管理人员进行处理。非......
  • 网站证书错误打不开网页怎么办
    遇到网站证书错误导致网页无法打开的情况,可以尝试以下几个步骤来解决:清除浏览器缓存和Cookies清除浏览器中的缓存数据和Cookies可能会帮助解决问题。更换浏览器尝试使用不同的浏览器访问该网站,有时候问题可能是浏览器特定的。检查日期和时间设置确保您的设备日期......
  • 索迪迈车载监控设备有哪些优势
    一、抽拔式硬盘设计便捷的数据管理车载监控设备需要应对大量的音视频数据。索迪迈车载监控设备采用了先进的抽拔式硬盘设计,使得数据管理变得极为方便。监控主机的硬盘不仅可以锁定在机器上,也可以轻松地从设备上抽取出,便于将录像数据带回管理中心进行统一管理和备份。相较于USB接口......
  • Kafka系列---【安装kafka监控工具EFAK】
    1.下载安装包EFAK官网:https://www.kafka-eagle.org/2.上传安装包到服务器并解压#注意:这里有两层,再解压一次tar-zxvfkafka-eagle-bin-3.0.1.tar.gztar-zxvfefak-web-3.0.1-bin.tar.gz3.修改配置文件viconfig/system-config.properties#修改zk和数据库#注意,默认......
  • 为什么安装了SSL证书还是不能HTTPS访问?
    安装了SSL证书后仍然无法通过HTTPS访问网站可能有以下几个原因:证书未正确配置:确保在服务器上正确安装并配置了SSL证书。这包括将证书文件正确放置,并在服务器软件中启用HTTPS。域名不匹配:检查SSL证书绑定的域名是否与实际访问的域名一致。如果访问的域名不在证书覆盖范围内,则......
  • 证书错误打不开网页怎么办
    遇到证书错误无法打开网页的情况,可以尝试以下几个步骤来解决:清除浏览器缓存和Cookies清除浏览器中的缓存数据和Cookies,有时候这些旧的数据会导致加载页面时出现问题。检查日期和时间设置确保您的设备日期和时间设置正确。不正确的系统时间可能导致证书验证失败。禁......
  • 监控室值班人员脱岗睡岗识别系统
    监控室值班人员脱岗睡岗识别系统基于Yolov7深度学习神经网络算法,监控室值班人员脱岗睡岗识别系统可以7*24小时不间断自动监控总监控室值班人员是否在工位上(脱岗睡岗玩手机),若值班人员没有在总监控室系统则立即抓拍告警,算法鲁棒性强。监控室值班人员脱岗睡岗识别系统检测到办公室人......
  • 校园食堂明厨亮灶监控分析系统
    校园食堂明厨亮灶监控分析系统通过yolov5网络模型技术,校园食堂明厨亮灶监控分析系统针对校园餐厅后厨厨师穿戴及行为进行7*24小时不间断实时分析预警,如:不按要求戴口罩、不穿厨师帽、陌生人员进入后厨、厨师不穿厨师服、上班时间玩手机、老鼠识别等行为。校园食堂明厨亮灶监控分析......
  • 监控室值班人员脱岗识别系统
    监控室值班人员脱岗识别系统通过AI视觉技术,监控室值班人员脱岗识别系统实现企业总监控室值班人员脱岗、睡岗、玩手机等场景的AI识别,不需人为干预全天候自动识别。监控室值班人员脱岗识别系统通过建设视频监控智能识别功能赋能企业端,监控室值班人员脱岗识别系统对各个生产企业总监......
  • 使用iostat监控磁盘使用
    tps每秒传输的次数Kb_read/s每秒从设备读出的数据量Kb_wrtn/s每秒向设备写入的数据量Kb_read从设备读出的数据总量Kb_wrtn向设备写入的数据总量每秒刷新一次数据[root@sre01~]#iostat1Linux3.10.0-1062.el7.x86_64(sre01)10/04/2024_x86......