美文网首页
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 .

相关文章

  • 这一届年轻人的腰已经快不行了

    Lower Back Pain in Young Adults 2021-03-26 389词 四级生活 Most...

  • LeakCanary 原理详解

    前言 本文是针对 LeakCanary Version 2.7 (2021-03-26) 版本的源码进行的分析。 ...

  • 周五 2021-03-26 23:40 - 06:30 晴 09

    周五 2021-03-26 23:40 - 06:30 晴 09h25m 记录闪现的灵感(inspirations...

  • bitshares比特股数据20210326

    2021-03-26比特股BTS大额转账的记录 时间转出转入BTS数量13:05:39zbbts001zbsend...

  • 时间和健康是最大的财富

    2021-03-26精进第66天 | 没有记录就没有发生 2021年的事业梦想个人目标描述:达成MDRT业绩目标,...

  • 时间:2021-03-26

    时间:2021-03-26 打卡人:婷婷 打卡天数:115Day 名言警句:再烂的专科也有人挑灯夜读 再好的本科也...

  • 从棕熊的描述说起

    2021-03-26 有些教学内容不必上纲上线。 之前,听有人讲过故事,批评我们的辞典在描述某种动物时,很实用的角...

  • 开源节流

    我怎么如此幸运-99将帅挑战赛20-重生210-戴红霞(2021-03-26) 我怎么如此幸运-开源节流 1.我怎...

  • 只要一开始写论文,就丧。。。

    2021-03-26 这两天心情跌到了谷底,那感觉也不是一个丧字,可以概述的。看了网上一些,解决丧的方式,静下心来...

  • 2021-03-26

    html 简述超链接target属性的取值和作用a 标签的target属性规定在何处打开链接文档语法: _blan...

网友评论

      本文标题:2021-03-26

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