Python脚本批量检查SSL证书过期时间

    背景

    云平台https的域名服务器如果超过上百条,如果都分布在不同的服务器或者负载均衡上,如果即将过期,做完替换SSL证书动作后,如何批量检查域名的SSL证书是否替换网站,可通过如下脚本实现。

    Python脚本批量检查SSL证书过期时间

    Python脚本

    保存domain-ssl-check.py文件内容如下:

    1. #!/usr/bin/env python3  
    2.   
    3. import ssl, socket  
    4. import requests  
    5. from dateutil import parser  
    6. import pytz  
    7.   
    8. requests.packages.urllib3.disable_warnings()  
    9.   
    10. try:  
    11.     _create_unverified_https_context = ssl._create_unverified_context  
    12. except AttributeError:  
    13.     # Legacy Python that doesn't verify HTTPS certificates by default  
    14.     pass  
    15. else:  
    16.     # Handle target environment that doesn't support HTTPS verification  
    17.     ssl._create_default_https_context = _create_unverified_https_context  
    18.   
    19.   
    20. def get_domain_content(domain):  
    21.     requests.packages.urllib3.disable_warnings()  
    22.     url = 'https://' + domain  
    23.     response = requests.get(url, verify=False).headers  
    24.     print(response)  
    25.   
    26.   
    27. def get_my_domain(mydomain):  
    28.     try:  
    29.         socket.setdefaulttimeout(5)  
    30.         my_addr = socket.getaddrinfo(mydomain, None)  
    31.         c = ssl.create_default_context()  
    32.         s = c.wrap_socket(socket.socket(), server_hostname=mydomain)  
    33.         s.connect((mydomain, 443))  
    34.         my_cert = s.getpeercert()  
    35.         get_my_cert_dated(mydomain, my_cert, my_addr)  
    36.     except ssl.CertificateError and socket.gaierror as e:  
    37.         pass  
    38.   
    39.   
    40. def get_my_cert_dated(domain, certs, my_addr):  
    41.     cert_beginning_time = parser.parse(certs['notBefore']).astimezone(pytz.utc)  
    42.     cert_end_time = parser.parse(certs['notAfter']).astimezone(pytz.utc)  
    43.   
    44.     print('域名:(%s)  证书失效时间: %s' % (domain,  cert_end_time))  
    45.   
    46.   
    47. def read_domain_files():  
    48.     with open('./domain.txt', 'r',  
    49.               encoding="utf-8") as file:  
    50.         for domain in file:  
    51.             try:  
    52.                 get_my_domain(domain.strip())  
    53.             except Exception as e:  
    54.                 print('域名: (%s)-%s' %(domain.strip(), e))  
    55.   
    56.   
    57. if __name__ == "__main__":  
    58.     read_domain_files()  

    使用方法

    准备domain.txt一个域名一行,可从DNS导出记录

    1. cat > domain.txt << EOF  
    2. linuxeye.com  
    3. www.linuxeye.com  
    4. oneinstack.com  
    5. www.linuxeye.com  
    6. EOF  

    执行:

    1. python3 domain-ssl-check.py  
    • 本文由 发表于 2021-09-03
    • 转载请务必保留本文链接:https://linuxeye.com/479.html
    腾讯云COS上传、批量删除工具(Python) 脚本

    腾讯云COS上传、批量删除工具(Python)

    腾讯云对象存储COS是类似于阿里云OSS,相比OSS,COS提供每月免费额度:存储空间50G、外网访问流量10G(内网免费)、免费读请求100万次、写请求10万次。对网站备份来说不错,但是,腾讯云提供...
    Python多线程抓取代理服务器 Linux

    Python多线程抓取代理服务器

    Python作为一门功能强大的脚本语言来说,经常被用来写爬虫程序,下面是Python爬虫多线程抓取代理服务器。 年前是用 //linuxeye.com/340.html 来抓取代理服务器的,谁知道过完...
    Python实现文件的全备份和差异备份 Linux

    Python实现文件的全备份和差异备份

    之前有写利用md5方式来做差异备份,但是这种md5方式来写存在以下问题: md5sum获取有些软连接的MD5值存在问题 不支持对空目录进行备份,因为md5sum无法获取空目录的md5值 权限的修改md...
    匿名

    发表评论

    匿名网友