AllInfo
Main: Info Blog Temp Mail


wrk 2025-01-01 11-48-22

  check https (ssl) certificate
 
import subprocess
from datetime import datetime
import argparse
 
def get_cert_expiry_date(domain):
    try:
        # Получаем сертификат и извлекаем дату истечения
        result = subprocess.run(
            ['openssl', 's_client', '-connect', f'{domain}:443', '-servername', domain],
            stdout=subprocess.PIPE,
            stderr=subprocess.PIPE,
            text=True,
            input='Qn'
        )
 
        # Извлекаем дату истечения из результата
        for line in result.stdout.splitlines():
            if 'notAfter' in line:
                return line.strip().split('=')[1]
 
        # Если не нашли, пробуем получить дату через x509
        cert_command = f"echo | openssl s_client -connect {domain}:443 -servername {domain} 2>/dev/null | openssl x509 -noout -enddate"
        expiry_date = subprocess.run(cert_command, shell=True, stdout=subprocess.PIPE, text=True)
 
        if expiry_date.stdout:
            return expiry_date.stdout.strip().split('=')[1]
 
        return None
    except Exception as e:
        print(f"Ошибка при получении сертификата для {domain}: {e}")
        return None
 
def check_ssl_expiry(domain):
    expiry_date_str = get_cert_expiry_date(domain)
 
    if expiry_date_str:
        try:
            expiry_date = datetime.strptime(expiry_date_str.strip(), '%b %d %H:%M:%S %Y %Z')
            remaining_days = (expiry_date - datetime.utcnow()).days
 
            if remaining_days < 30:
                print(f"Сертификат для {domain} истекает через {remaining_days} дней.")
            else:
                print(f"Сертификат для {domain} действителен еще {remaining_days} дней.")
        except ValueError as ve:
            print(f"Ошибка при парсинге даты для {domain}: {ve}")
    else:
        print(f"Сертификат для {domain} не содержит даты истечения или не удалось получить информацию.")
 
if __name__ == "__main__":
    parser = argparse.ArgumentParser(description='Check SSL certificate expiry dates.')
    parser.add_argument('domains', metavar='domain', type=str, nargs='+',
                        help='Domain names to check')
 
    args = parser.parse_args()
 
    for domain in args.domains:
        check_ssl_expiry(domain)


3.149.229.207 / 2025-02-05_07-00-09 UTC.