Python – Scan FQDNS, Get the Expiration, and Display Results

# Author: Kerry Cordero
# Version: 1.0.0
# Description: This script will scan a text document "dr-dns.txt", get the SSL Certificate Expiration, and show the date.  There's a timeout set to 5 seconds.

import os
import ssl
import socket
import datetime

def get_ssl_expiry_date(hostname):
    try:
        context = ssl.create_default_context()
        with socket.create_connection((hostname, 443), timeout=5) as sock:
            with context.wrap_socket(sock, server_hostname=hostname) as sslsock:
                cert = sslsock.getpeercert()
                expiry_date = datetime.datetime.strptime(cert['notAfter'], "%b %d %H:%M:%S %Y %Z")
                return expiry_date.date()
    except (ssl.SSLError, socket.error, socket.timeout, ConnectionRefusedError):
        return None

filename = os.path.join(os.path.dirname(__file__), "dr-dns.txt")

with open(filename, "r") as file:
    for line in file:
        fqdn = line.strip()
        expiry_date = get_ssl_expiry_date(fqdn)
        if expiry_date is not None:
            print(f"{fqdn} - SSL certificate expires on: {expiry_date}")
        else:
            print(f"{fqdn} - No SSL connection or unable to retrieve certificate")