Задать вопрос
  • Как проверить дату окончания всех сертификатов сайта?

    @xgyrfalconx Автор вопроса
    В общем решение нашел сам , смысл скрипта заключается в том что бы получить каждый сертификат отдельно и по каждому отдельно вызвать "openssl x509" , если кому то это поможет в будущем то оставлю здесь свой скрипт на python:
    #!/usr/bin/python3
    
    import re
    import datetime
    import sys
    import traceback
    from subprocess import PIPE, Popen, DEVNULL
    
    
    def get_cert_dates(hostname):
        try:
            result = []
            certs = Popen('sudo openssl s_client -showcerts -verify_quiet -servername {0} -connect {0}:443'.format(hostname), shell=True,
                          stdout=PIPE, stdin=DEVNULL, stderr=PIPE).stdout.read().decode('utf-8')
            pattern = r'(-----BEGIN CERTIFICATE-----[\D\d]*?-----END CERTIFICATE-----)'
            for cert in re.findall(pattern, certs):
                data = Popen('echo "{}" |sudo openssl x509 -subject -dates -noout'.format(cert), shell=True, stdout=PIPE,
                             stderr=PIPE).stdout.read().decode('utf-8').split('\n')
                subject = re.search(r'CN\s*=\s*([\D\d]*?$)',
                                    data[0]).group(1).strip().replace(' ', '_').replace("'", '')
                expiry_dt = datetime.datetime.strptime(re.search(r'notAfter\s*=\s*([\D\d]*?$)', data[2]).group(1),
                                                       '%b %d %H:%M:%S %Y %Z')
                expiry_ts = int(datetime.datetime.timestamp(expiry_dt))
                end = expiry_ts - int(datetime.datetime.timestamp(datetime.datetime.now()))
                result.append({'subject': subject, 'expiry_dt': expiry_dt, 'expiry_ts': expiry_ts, 'end': end})
            return result
        except:
            print(traceback.format_exc())
    
    
    print(get_cert_dates('yandex.ru'))
    Ответ написан
    Комментировать