def inspect(host, port):
try:
r = requests.get('https://%s:%s' % (host, port), timeout=2)
except SSLError as e:
errmsg = str(e)
# CHECK ERR_HOST_NOT_MATCH
if errmsg.startswith('hostname'):
return ERR_HOST_NOT_MATCH
try:
raw_cert = ssl.get_server_certificate((host, port))
except:
return ERR_UNKNOWN
x509 = crypto.load_certificate(crypto.FILETYPE_PEM, raw_cert)
# CHECK ERR_EXPIRED
now = datetime.now()
not_after = datetime.strptime(x509.get_notAfter().decode('utf-8'),
"%Y%m%d%H%M%SZ")
not_before = datetime.strptime(x509.get_notBefore().decode('utf-8'),
"%Y%m%d%H%M%SZ")
if now > not_after or now < not_before:
return ERR_EXPIRED
# otherwise ERR_SELF_SIGNED
return ERR_SELF_SIGNED
except ConnectionError as e:
return ERR_TIMEOUT
except Timeout as e:
return ERR_TIMEOUT
except:
return ERR_UNKNOWN
return ERR_NONE
评论列表
文章目录