#!/usr/local/bin/python3.5
import socket, ssl
import json
from datetime import datetime
import time
import argparse
import sys
def getCertification():
    try:
        context = ssl.create_default_context()
        conn = context.wrap_socket(socket.socket(socket.AF_INET), server_hostname=HOST)
        conn.connect((HOST, PORT))
        cert = conn.getpeercert()
        #print(cert)
        if not [x[1] for x in cert["subjectAltName"] if x[1] == HOST]:
            # Host not found
            return ""
        else:
            return cert
    except:
        exit("handshake failed",sys.exc_info()[0])
    else:
        print(-99)
def calculateDate(cert):
    try:
        startdate = datetime.strptime(cert["notBefore"] , "%b %d %H:%M:%S %Y %Z")
        expire_date = datetime.strptime(cert["notAfter"] , "%b %d %H:%M:%S %Y %Z")
        nowdate = datetime.now()
        start_in = nowdate - startdate
        expire_in = expire_date - nowdate
        return expire_in.days
    except:
        pass
def main():
    parser = argparse.ArgumentParser()
    parser.add_argument('host', help='specify an host to connect to')
    parser.add_argument('-p', '--port', help='specify a port to connect to',
                        type=int, default=443)
    args = parser.parse_args()
    global HOST, PORT
    HOST = args.host
    PORT = args.port
    cert = getCertification()
    if cert == "":
        exit("Host not found in DNS names")
    else:
        print(calculateDate(cert))
if __name__ == "__main__":
    main()