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  

【AD】炭云:768元/年/1GB内存/20GB SSD空间/2TB流量/500Mbps-1Gbps端口/独立IPv4/KVM/广州移动

【AD】美国洛杉矶CN2 VPS/香港CN2 VPS/日本CN2 VPS推荐,延迟低、稳定性高、免费备份_搬瓦工vps