0%

使用Python检查ssl证书过期时间

最近要写个脚本巡检下公司一些站点的ssl证书的过期时间,以便于提前进行更换。本文记录下使用Python来检查ssl证书过期时间的方法。

用python检查的话,比较方便的方法是安装OpenSSL库来解析证书内容,获取过期时间:

1
pip install pyOpenSSL

然后写出来的脚本是这个样子的:

1
2
3
4
5
6
7
8
import ssl
import OpenSSL

def get_ssl_expiry_date(host, port=443):
""" get notAfter data from server cert """
cert = ssl.get_server_certificate((host, port))
x509 = OpenSSL.crypto.load_certificate(OpenSSL.crypto.FILETYPE_PEM, cert)
return x509.get_notAfter().decode()

运行后,得到的过期时间样式为:

1
'20220219235959Z'

这是个UTC时间的字符串,也可以再来个脚本,转化下这个时间:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import datetime
from pytz import timezone

# conf
SRC_TZ = 'UTC'
DST_TZ = 'Asia/Shanghai'

def load_ssl_date(dt_string, pattern='%Y%m%d%H%M%SZ'):
""" convert ssl date from string to datetime obj """
src_tz = timezone(SRC_TZ)
dst_tz = timezone(DST_TZ)
dt = src_tz.localize(datetime.datetime.strptime(dt_string, pattern))
return dt.astimezone(tz=dst_tz)

然后就可以判断证书是不是快过期了~

另外还发现了一个网站:https://badssl.com ,这个站点构造了大量ssl证书异常的情况,其中https://expired.badssl.com/可用于测试证书过期的情景。平时要测试代码的兼容性就可以拿来测试下了。

如果我的文字帮到了您,那么可不可以请我喝罐可乐?