最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python實(shí)現(xiàn)檢測(cè)SSL證書是否過期

 更新時(shí)間:2023年08月04日 10:25:29   作者:咸魚Linux運(yùn)維  
我們知道 SSL 證書是會(huì)過期的,一旦過期之后需要重新申請(qǐng),如果沒有及時(shí)更換證書的話,就有可能導(dǎo)致網(wǎng)站出問題,所以本文介紹了如何利用Python實(shí)現(xiàn)檢測(cè)SSL證書是否過期,需要的可以參考下

之前寫了個(gè) shell 版本的 SSL 證書過期巡檢腳本 (文章:《SSL 證書過期巡檢腳本》),后臺(tái)反響還是很不錯(cuò)的

那么今天咸魚給大家介紹一下 python 版本的 SSL 證書過期巡檢腳本 (完整代碼在文末)

思路

導(dǎo)入相關(guān)模塊

import ssl
import socket
import time
from datetime import datetime

首先我們創(chuàng)建一個(gè) domain.txt 用來存放要檢查的域名和對(duì)應(yīng)的 IP 地址

www.baidu.com:180.101.50.242,180.101.50.188
www.bing.com:202.89.233.101,202.89.233.100

我們讀取該文件,把里面的域名和對(duì)應(yīng)的每個(gè) ip 取出來,并存放到字典 domains 里面

domains = {}
with open('domain.txt', 'r', encoding='utf-8') as file:
	for line in file:
		domain, ip_pool = line.strip().split(':')
		domains[domain] = ip_pool.split(',')

取出來之后我們循環(huán)遍歷字典,去獲取每個(gè)域名對(duì)應(yīng)的證書信息(ssl_connect 函數(shù))

def ssl_connect(domain, ip):
    # 設(shè)置socket的超時(shí)時(shí)間為5秒
    socket.setdefaulttimeout(5)
    # 創(chuàng)建默認(rèn)的SSL上下文
    context = ssl.create_default_context()
    # 創(chuàng)建一個(gè)SSL套接字
    skt = context.wrap_socket(socket.socket(), server_hostname=domain)
    try:
        # 建立SSL連接
        skt.connect((ip, 443))
        # 獲取證書過期時(shí)間
        end_date = skt.getpeercert()['notAfter'].strip(' GMT')
        # 創(chuàng)建一個(gè)字典,存儲(chǔ)本次連接中的域名、IP 地址和證書過期時(shí)間信息
        skt_info = {'domain': domain, 'ip': ip, 'end_date': end_date}
    except ssl.CertificateError as e:
        cert = e
    except socket.timeout:
        cert = 'Connect refused'
    except ConnectionResetError as e:
        cert = 'Connect reset' + str(e)
    except socket.gaierror as e:
        cert = 'Connnect gaierror'
    finally:
        # 關(guān)閉SSL套接字
        skt.close()
    return skt_info

ssl_connect 函數(shù)返回一個(gè)字典 skt_info,包含當(dāng)前連接的域名、ip 地址和證書過期時(shí)間

# skt_info 內(nèi)容
{'domain': 'www.baidu.com', 'ip': '180.101.50.242', 'end_date': 'Aug  6 01:51:05 2024'}
{'domain': 'www.baidu.com', 'ip': '180.101.50.188', 'end_date': 'Aug  6 01:51:05 2024'}
{'domain': 'www.bing.com', 'ip': '202.89.233.101', 'end_date': 'Aug 16 03:47:45 2023'}
{'domain': 'www.bing.com', 'ip': '202.89.233.100', 'end_date': 'Aug 16 03:47:45 2023'}

然后我們調(diào)用 check_cert_time 函數(shù)進(jìn)行證書有效期檢查和提示

info = [ssl_connect(domain, ip) for domain, ip_pool in domains.items() for ip in ip_pool]
[check_cert_time(i) for i in info]

check_cert_time 函數(shù)內(nèi)容如下:

def check_cert_time(info):
    # 獲取當(dāng)前時(shí)間戳
    current_timestamp = int(time.time())
    # 將證書過期時(shí)間轉(zhuǎn)換成時(shí)間戳
    date_object = datetime.strptime(info['end_date'], "%b %d %H:%M:%S %Y")
    end_timestamp = int(date_object.timestamp())
    # 計(jì)算剩余天數(shù)
    remain_day = (end_timestamp - current_timestamp) / 86400
    # 打印域名、IP 地址和證書過期時(shí)間信息
    print(f"域名:{info['domain']},ip 地址:{info['ip']},證書過期時(shí)間:{info['end_date']}")
    # 根據(jù)剩余天數(shù)進(jìn)行不同的提示
    # 如果證書過期時(shí)間減去當(dāng)前時(shí)間的天數(shù)小于七天的話,則提示需要準(zhǔn)備更換證書了
    if 0 < remain_day < 7:
        print('剩余時(shí)間小于七天!請(qǐng)及時(shí)更換證書!')
    elif remain_day < 0:
        print('證書已過期!請(qǐng)及時(shí)更換證書!')
    else:
        print(f"剩余天數(shù)為:{remain_day:.2f}天\n")

最后我們執(zhí)行一下代碼,看看結(jié)果如何

完整代碼

import ssl
import socket
import time
from datetime import datetime
def ssl_connect(domain, ip):
    # 設(shè)置socket的超時(shí)時(shí)間為5秒
    socket.setdefaulttimeout(5)
    # 創(chuàng)建默認(rèn)的SSL上下文
    context = ssl.create_default_context()
    # 創(chuàng)建一個(gè)SSL套接字
    skt = context.wrap_socket(socket.socket(), server_hostname=domain)
    try:
        # 建立SSL連接
        skt.connect((ip, 443))
        # 獲取證書過期時(shí)間
        end_date = skt.getpeercert()['notAfter'].strip(' GMT')
        # 創(chuàng)建一個(gè)字典,存儲(chǔ)本次連接中的域名、IP 地址和證書過期時(shí)間信息
        skt_info = {'domain': domain, 'ip': ip, 'end_date': end_date}
    except ssl.CertificateError as e:
        cert = e
    except socket.timeout:
        cert = 'Connect refused'
    except ConnectionResetError as e:
        cert = 'Connect reset' + str(e)
    except socket.gaierror as e:
        cert = 'Connnect gaierror'
    finally:
        # 關(guān)閉SSL套接字
        skt.close()
    return skt_info
def check_cert_time(info):
    # 獲取當(dāng)前時(shí)間戳
    current_timestamp = int(time.time())
    # 將證書過期時(shí)間轉(zhuǎn)換成時(shí)間戳
    date_object = datetime.strptime(info['end_date'], "%b %d %H:%M:%S %Y")
    end_timestamp = int(date_object.timestamp())
    # 計(jì)算剩余天數(shù)
    remain_day = (end_timestamp - current_timestamp) / 86400
    # 打印域名、IP 地址和證書過期時(shí)間信息
    print(f"域名:{info['domain']},ip 地址:{info['ip']},證書過期時(shí)間:{info['end_date']}")
    # 根據(jù)剩余天數(shù)進(jìn)行不同的提示
    # 如果證書過期時(shí)間減去當(dāng)前時(shí)間的天數(shù)小于七天的話,則提示需要準(zhǔn)備更換證書了
    if 0 < remain_day < 7:
        print('剩余時(shí)間小于七天!請(qǐng)及時(shí)更換證書!')
    elif remain_day < 0:
        print('證書已過期!請(qǐng)及時(shí)更換證書!')
    else:
        print(f"剩余天數(shù)為:{remain_day:.2f}天\n")
if __name__ == "__main__":
    domains = {}
    with open('domain.txt', 'r', encoding='utf-8') as file:
        for line in file:
            domain, ip_pool = line.strip().split(':')
            domains[domain] = ip_pool.split(',')
    info = [ssl_connect(domain, ip) for domain, ip_pool in domains.items() for ip in ip_pool]
    [check_cert_time(i) for i in info]

到此這篇關(guān)于Python實(shí)現(xiàn)檢測(cè)SSL證書是否過期的文章就介紹到這了,更多相關(guān)Python檢測(cè)SSL是否過期內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python中SyntaxError的常見場(chǎng)景和修正指南

    Python中SyntaxError的常見場(chǎng)景和修正指南

    在Python編程中,語法錯(cuò)誤(SyntaxError)是最基礎(chǔ)的異常類型之一,它發(fā)生在代碼違反Python語法規(guī)則時(shí),本文將系統(tǒng)梳理Python中常見的SyntaxError場(chǎng)景,結(jié)合典型案例與修正策略,幫助開發(fā)者快速定位并修復(fù)語法問題,需要的朋友可以參考下
    2025-12-12
  • Python隨機(jī)數(shù)種子(random seed)的使用

    Python隨機(jī)數(shù)種子(random seed)的使用

    在科學(xué)技術(shù)和機(jī)器學(xué)習(xí)等其他算法相關(guān)任務(wù)中,我們經(jīng)常需要用到隨機(jī)數(shù),本文就詳細(xì)的介紹一下Python隨機(jī)數(shù)種子,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • python df遍歷的N種方式(小結(jié))

    python df遍歷的N種方式(小結(jié))

    本文主要介紹了python df遍歷的N種方式,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • 小學(xué)生必須掌握的Python語法與代碼示例

    小學(xué)生必須掌握的Python語法與代碼示例

    學(xué)習(xí)Python從入門到精通,關(guān)鍵在于先建立扎實(shí)的核心概念(如基礎(chǔ)語法、函數(shù)、面向?qū)ο螅?再系統(tǒng)掌握其高級(jí)特性和生態(tài)工具,下面我為你規(guī)劃了一條清晰的學(xué)習(xí)路徑,并提供了核心知識(shí)框架和示例,感興趣的朋友跟隨小編一起看看吧
    2026-02-02
  • python不使用for計(jì)算兩組、多個(gè)矩形兩兩間的iou方式

    python不使用for計(jì)算兩組、多個(gè)矩形兩兩間的iou方式

    今天小編就為大家分享一篇python不使用for計(jì)算兩組、多個(gè)矩形兩兩間的iou方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • PyCharm配置mongo插件的方法

    PyCharm配置mongo插件的方法

    今天小編就為大家分享一篇PyCharm配置mongo插件的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-11-11
  • 對(duì)python中return和print的一些理解

    對(duì)python中return和print的一些理解

    最近看到視頻中講到python中的print和return的區(qū)別,感到一些迷惑,所以自己上手實(shí)踐了一把,下面這篇文章主要給大家介紹了關(guān)于對(duì)python中return和print的一些理解,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-08-08
  • Python列表推導(dǎo)式詳解

    Python列表推導(dǎo)式詳解

    列表推導(dǎo)式是Python構(gòu)建列表(list)的一種快捷方式,可以使用簡(jiǎn)潔的代碼就創(chuàng)建出一個(gè)列表.本文通過代碼示例詳細(xì)介紹了python列表推導(dǎo)式,感興趣的同學(xué)可以參考閱讀
    2023-04-04
  • pd.drop_duplicates刪除重復(fù)行的方法實(shí)現(xiàn)

    pd.drop_duplicates刪除重復(fù)行的方法實(shí)現(xiàn)

    drop_duplicates 方法實(shí)現(xiàn)對(duì)數(shù)據(jù)框 DataFrame 去除特定列的重復(fù)行,本文主要介紹了pd.drop_duplicates刪除重復(fù)行的方法實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • Python+Pygame實(shí)現(xiàn)神廟逃亡游戲

    Python+Pygame實(shí)現(xiàn)神廟逃亡游戲

    這篇文章主要為大家介紹了如何利用Python和Pygame動(dòng)畫制作一個(gè)神廟逃亡類似的小游戲。文中的示例代碼講解詳細(xì),感興趣的小伙伴可以動(dòng)手嘗試一下
    2022-05-05

最新評(píng)論

莱阳市| 瓦房店市| 曲松县| 巨野县| 文登市| 文登市| 都匀市| 上饶市| 兴安盟| 左贡县| 高青县| 上蔡县| 科技| 龙里县| 沧州市| 罗定市| 莱芜市| 衡山县| 岳池县| 普兰县| 黔西县| 无极县| 宁城县| 墨玉县| 怀仁县| 宕昌县| 定州市| 花垣县| 玛纳斯县| 临汾市| 盐亭县| 汨罗市| 鸡东县| 特克斯县| 景宁| 赤壁市| 逊克县| 潞城市| 芦溪县| 丁青县| 潼关县|