Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import ssl
- import socket
- import datetime
- import smtplib
- from email.mime.text import MIMEText
- from email.mime.multipart import MIMEMultipart
- def check_certificate_expiry(url, days_threshold=20):
- """Checks if a website's SSL certificate expires within the given threshold."""
- try:
- hostname = url.split('//')[-1].split('/')[0] # Extract hostname
- port = 443 # Default HTTPS port
- context = ssl.create_default_context()
- with socket.create_connection((hostname, port)) as sock:
- with context.wrap_socket(sock, server_hostname=hostname) as ssock:
- cert = ssock.getpeercert()
- expiry_date_str = cert['notAfter']
- expiry_date = datetime.datetime.strptime(expiry_date_str, '%b %d %H:%M:%S %Y %Z')
- now = datetime.datetime.utcnow()
- time_remaining = expiry_date - now
- if time_remaining.days <= days_threshold:
- return url, expiry_date
- else:
- return None, None
- except (socket.gaierror, ConnectionRefusedError, ssl.SSLError, ValueError, IndexError) as e: # Handle potential errors
- print(f"Error checking {url}: {e}")
- return None, None
- def send_email(expired_certs, recipient_email="[email protected]", sender_email="[email protected]", sender_password="your_password"):
- """Sends an email with the list of expiring certificates."""
- if not expired_certs: # Check if expired_certs is empty
- print("No certificates expiring soon.")
- return
- message = MIMEMultipart()
- message['From'] = sender_email
- message['To'] = recipient_email
- message['Subject'] = "Expiring SSL Certificates"
- email_body = "The following certificates are expiring soon:\n\n"
- for url, expiry_date in expired_certs:
- email_body += f"URL: {url}\nExpiry Date: {expiry_date}\n\n"
- message.attach(MIMEText(email_body, 'plain'))
- try:
- with smtplib.SMTP_SSL('smtp.gmail.com', 465) as server: # Example using Gmail, adjust as needed
- server.login(sender_email, sender_password)
- server.sendmail(sender_email, recipient_email, message.as_string())
- print("Email sent successfully.")
- except Exception as e:
- print(f"Error sending email: {e}")
- def main():
- """Reads URLs from a file, checks certificates, and sends an email."""
- try:
- with open("urls.txt", "r") as f: # Replace "urls.txt" with your file name
- urls = [line.strip() for line in f]
- except FileNotFoundError:
- print("urls.txt file not found. Please create this file with your urls")
- return
- expiring_certificates = []
- for url in urls:
- url_with_protocol = url if url.startswith("http://") or url.startswith("https://") else "https://" + url
- url_with_protocol = url_with_protocol.split("#")[0] #remove anchor links if present
- checked_url, expiry_date = check_certificate_expiry(url_with_protocol)
- if checked_url:
- expiring_certificates.append((checked_url, expiry_date))
- send_email(expiring_certificates)
- if __name__ == "__main__":
- main()
Advertisement
Add Comment
Please, Sign In to add comment