#!/usr/bin/env python3
import socket
import ssl
import pytz
import requests
from dateutil import parser
requests.packages.urllib3.disable_warnings()
try:
_create_unverified_https_context = ssl._create_unverified_context
except AttributeError:
# Legacy Python that doesn't verify HTTPS certificates by default
pass
else:
# Handle target environment that doesn't support HTTPS verification
ssl._create_default_https_context = _create_unverified_https_context
def get_domain_content(domain):
requests.packages.urllib3.disable_warnings()
url = 'https://' + domain
response = requests.get(url, verify=False).headers
print(response)
def get_my_domain(mydomain):
try:
socket.setdefaulttimeout(5)
my_addr = socket.getaddrinfo(mydomain, None)
c = ssl.create_default_context()
s = c.wrap_socket(socket.socket(), server_hostname=mydomain)
s.connect((mydomain, 443))
my_cert = s.getpeercert()
get_my_cert_dated(mydomain, my_cert, my_addr)
except ssl.CertificateError and socket.gaierror as e:
pass
def get_my_cert_dated(domain, certs, my_addr):
cert_beginning_time = parser.parse(certs['notBefore']).astimezone(pytz.utc)
cert_end_time = parser.parse(certs['notAfter']).astimezone(pytz.utc)
print('域名:(%s) 证书失效时间: %s' % (domain, cert_end_time))
def read_domain_files():
with open('./url.txt', 'r',
encoding="utf-8") as file:
for domain in file:
try:
get_my_domain(domain.strip())
except Exception as e:
print('域名: (%s) 检查异常,返回结果: %s' %(domain.strip(), e))
if __name__ == "__main__":
read_domain_files()
在当前目录下创建一个url.txt文件,将需要检测域名写入文件内
[root@test src]# cat url.txt
www.baidu.com
www.360.com
editor.csdn.net
之后执行脚本输出结果
[root@test src]# python3 ssl_check.py
域名:(www.baidu.com) 证书失效时间: 2023-08-06 05:16:01+00:00
域名:(www.360.com) 证书失效时间: 2023-04-29 23:59:59+00:00
域名:(editor.csdn.net) 证书失效时间: 2023-12-01 23:59:59+00:00