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  

 
  • 本文由 yeho 发表于 2021-09-03
  • 转载请务必保留本文链接:https://linuxeye.com/479.html
脚本

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

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

Python多线程抓取代理服务器

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

发表评论

匿名网友
确定

拖动滑块以完成验证