python监控网站证书有效期

python监控网站证书有效期

import OpenSSL
import ssl
from datetime import datetime

'''
获取网站https证书有效期
'''

def main(domain):
    try:
        hostname = domain
        port = 443
        conn = ssl.create_connection((hostname, port))
        context = ssl.SSLContext(ssl.PROTOCOL_SSLv23)
        sock = context.wrap_socket(conn, server_hostname=hostname)
        cert = ssl.DER_cert_to_PEM_cert(sock.getpeercert(True))
        x509 = OpenSSL.crypto.load_certificate(
            OpenSSL.crypto.FILETYPE_PEM, cert)
        start_date = str(x509.get_notBefore(), encoding='utf-8')
        expire_date = str(x509.get_notAfter(), encoding='utf-8')
        # time 字符串转时间数组
        start_date = datetime.strptime(start_date, "%Y%m%d%H%M%SZ")
        # datetime 字符串转时间数组
        expire_date = datetime.strptime(expire_date, "%Y%m%d%H%M%SZ")
        # 剩余天数
        remain_days = (expire_date-datetime.now()).days
        print('{} ssl start_date,expire_date,remain_days is {},{},{}'.format(
            domain, start_date, expire_date, remain_days))
        return start_date, expire_date, remain_days
    except Exception as e:
        print('{} {}'.format(e.__traceback__.tb_lineno, e))
        return datetime.now(), datetime.now(), -999999999

if __name__ == "__main__":
    remain_days = main('www.guojingyi.cn')
    print(remain_days)

You may also like...