美文网首页
2021-03-26

2021-03-26

作者: Durov | 来源:发表于2021-03-25 13:51 被阅读0次

    **Python SSL Certificate Checker **

    Continuing our Networking Automation using Python blog series, here is the Part 7.

    In this part we are explaining python script which will check the expiry date of a SSL certificate from a list of IP address and send an e-mail automatically if the certificate expiry date is nearing. The IP addresses can be of your load balancer VIP or Server IP address or any device IP address. You can use same script to check SSL certificate for any port number like 443,587,993,995,465 etc.

    Basic Requirements

    1. Python 3.6
    2. server_ip.txt , a text file which contains all device IP address
    3. A email account on www.outlook.com . You can use any other mail account by editing SMTP server detail on the script. Please let us know if you want customised script which will sent mail from your corporate mail account or Microsoft Outlook.

    Please read part 1 and part 2 to get started with python and how to run your first program.

    This script have two files

    1. server_ip.txt -> this file store all the device IP address
    2. sslcheck.py -> This is the python script

    ——————- advertisements ——————-

    ———————————————————-

    How to run :

    Step 1. Download the sslcheck and server_ip to the same folder

    Step 2. Change the sslcheck.txt to sslcheck.py

    Step 3. Open server_ip.txt and save with all your device IP address with port number whose SSL certificate need to be check.

    Step 4. Open command prompt “CMD” and navigate to the folder where you have saved script and ‘server_ip.txt’

    Step 5. Run script by typing “python sslcheck.py” on command prompt

    Step 6.It will ask for threshold date, from mail id , to mail id and credentials. Please provide the same

    Step 7. Script will go though each device SSL certificate and sent mail if anything going to expire within given number of days.

    Script Details

    import ssl
    from datetime import datetime
    import pytz
    import OpenSSL
    import socket
    import getpass
    from datetime import timedelta
    import smtplib
    from email.mime.multipart import MIMEMultipart
    from email.mime.text import MIMEText

    print(“Program to check SSL certificate validity \n”)

    opening file

    ipfile=open(‘server_ip.txt’)
    cur_date = datetime.utcnow()
    mailbody=””
    expcount=0

    getting details

    expday=input(“Please provide threshold expiry date :”)
    from_mail=input(“Your mail id : “)
    passwd=getpass.getpass(“password : “)
    to_mail=input(“Target mail id : “)

    checking certificate validity. for loop to go through each IP in server_ip.txt file

    for ip in ipfile:
    try:
    host = ip.strip().split(“:”)[0]
    port = ip.strip().split(“:”)[1]
    print(“\nChecking certifcate for server “,host)
    ctx = OpenSSL.SSL.Context(ssl.PROTOCOL_TLSv1)
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect((host, int(port)))
    cnx = OpenSSL.SSL.Connection(ctx, s)
    cnx.set_connect_state()
    cnx.do_handshake()
    cert=cnx.get_peer_certificate()
    s.close()
    server_name = cert.get_subject().commonName
    print (server_name)

    checking expiry date

    edate=cert.get_notAfter()
    edate=edate.decode()

    converting in to system time format

    exp_date = datetime.strptime(edate,’%Y%m%d%H%M%SZ’)
    days_to_expire = int((exp_date – cur_date).days)
    print(“day to expire”,days_to_expire)

    preparing mail body

    if days_to_expire < int(expday) :
    expcount=expcount+1
    mailbody=mailbody+”\n Server name =”+server_name+”, Days to expire:”+str(days_to_expire)

    except:
    print (“error on connection to Server,”,host)
    print (mailbody)

    sending mail if any certificate going to expire within threshold days

    if expcount >= 1 :
    try:
    print(“\nCertifcate alert for “+str(expcount)+” Servers,Sending mails”)

    body=”Following certificate going to expire, please take action \n”+mailbody
    s = smtplib.SMTP(host=’smtp-mail.outlook.com’, port=587) # change here if you want to use other smtp server
    s.starttls()
    s.login(from_mail,passwd)

    msg = MIMEMultipart() # create a message
    msg[‘From’]=from_mail
    msg[‘To’]=to_mail
    msg[‘Subject’]=”Certificate Expire alert”

    add in the message body

    msg.attach(MIMEText(str(body),’plain’))

    send the message via the server set up earlier.

    s.send_message(msg)
    print(“Mail sent”)
    s.close()
    except:
    print (“Sending mail failed”)
    else :
    print(“All certificate are below the threshold date”)

    print (‘\nCert check completed’)

    **Sample Output **

    Below images are sample script and a sample e-mail alert.

    image image

    Sample e-mail alert

    Hope this post helped you. You can read more posts on Network automation using Python here. Please use the comments section for any queries/suggestions .

    相关文章

      网友评论

          本文标题:2021-03-26

          本文链接:https://www.haomeiwen.com/subject/vtpjhltx.html