Skip to content

Instantly share code, notes, and snippets.

@quanon
Last active December 19, 2017 09:41
Show Gist options
  • Save quanon/50bbbb01a646d8e4f1d77b2f92c3fb0d to your computer and use it in GitHub Desktop.
Save quanon/50bbbb01a646d8e4f1d77b2f92c3fb0d to your computer and use it in GitHub Desktop.
certificate.py
from datetime import datetime
from OpenSSL import crypto
from pytz import timezone
import ssl
class CetificateDatetime:
WEEKDAYS = ('月', '火', '水', '木', '金', '土', '日')
def __init__(self, dt):
dt = dt.astimezone(timezone('UTC'))
dt = dt.astimezone(timezone('Asia/Tokyo'))
self.dt = dt
def __repr__(self):
date = self.dt.strftime('%Y/%m/%d')
wday = self.WEEKDAYS[self.dt.weekday()]
time = self.dt.strftime('%H:%M:%S %Z')
return f'{date} ({wday}) {time}'
class Cetificate:
datetime_format = '%Y%m%d%H%M%SZ'
def __init__(self, hostname):
self.hostname = hostname
@property
def x509(self):
if not hasattr(self, '_x509'):
cert = ssl.get_server_certificate((self.hostname, 443))
self._x509 = crypto.load_certificate(crypto.FILETYPE_PEM, cert)
return self._x509
@property
def not_before(self):
dt = datetime.strptime(self.x509.get_notBefore().decode(),
self.datetime_format)
dt = self._utc_to_jst(dt)
return CetificateDatetime(dt)
@property
def not_after(self):
dt = datetime.strptime(self.x509.get_notAfter().decode(),
self.datetime_format)
dt = self._utc_to_jst(dt)
return CetificateDatetime(dt)
@property
def cn(self):
return self.x509.get_issuer().CN
@property
def issuer(self):
return self.x509.get_issuer().CN
def _utc_to_jst(self, dt):
dt = dt.astimezone(timezone('UTC'))
dt = dt.astimezone(timezone('Asia/Tokyo'))
return dt
if __name__ == '__main__':
cert = Cetificate('letsencrypt.jp')
print(f'コモンネーム: {cert.cn}')
print(f'発行者: {cert.issuer}')
print(f'Not Before: {cert.not_before}')
print(f'Not After: {cert.not_after}')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment