1. 程式人生 > 程式設計 >基於python檢查SSL證書到期情況程式碼例項

基於python檢查SSL證書到期情況程式碼例項

結合郵件告警和頁面展示,再多的域名證書到期情況即可立馬知道

程式碼示例:

# coding: utf-8 
# 查詢域名證書到期情況

import re
import time
import subprocess
from datetime import datetime
from io import StringIO

def main(domain):
  f = StringIO()
  comm = f"curl -Ivs https://{domain} --connect-timeout 10"

  result = subprocess.getstatusoutput(comm)
  f.write(result[1])

  m = re.search('start date: (.*?)\n.*?expire date: (.*?)\n.*?common name: (.*?)\n.*?issuer: CN=(.*?)\n',f.getvalue(),re.S)
  start_date = m.group(1)
  expire_date = m.group(2)
  common_name = m.group(3)
  issuer = m.group(4)

  # time 字串轉時間陣列
  start_date = time.strptime(start_date,"%b %d %H:%M:%S %Y GMT")
  start_date_st = time.strftime("%Y-%m-%d %H:%M:%S",start_date)
  # datetime 字串轉時間陣列
  expire_date = datetime.strptime(expire_date,"%b %d %H:%M:%S %Y GMT")
  expire_date_st = datetime.strftime(expire_date,"%Y-%m-%d %H:%M:%S")

  # 剩餘天數
  remaining = (expire_date-datetime.now()).days

  print ('域名:',domain)
  print ('通用名:',common_name)
  print ('開始時間:',start_date_st)
  print ('到期時間:',expire_date_st)
  print (f'剩餘時間: {remaining}天')
  print ('頒發機構:',issuer)
  print ('*'*30)

  time.sleep(0.5)

if __name__ == "__main__":
  domains = ['www.baidu.com'] 
  for domain in domains:
    main(domain)

結果示例:

域名: www.baidu.com
通用名: baidu.com
開始時間: 2019-05-09 01:22:02
到期時間: 2020-06-25 05:31:02
剩餘時間: 82天
頒發機構: GlobalSign Organization Validation CA - SHA256 - G2,O=GlobalSign nv-sa,C=BE
******************************

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。