开源python脚本系列-批量查询ssl过期时间

aeb632361bd2d33428ab23232239a089.png

波哥的全栈新项目pc端上线了:

https://www.98dev.com

有空个可以去看看,一个IT资源类导航,实时更新的哦~

脚本说明:

    批量查询域名证书过期时间的脚本,这个需求应该是比较普遍的。DOMAIN_LIST用来填写域名列表,其他没什么需要特别说明的,这个是个python3的脚本

脚本功能:

    需要特别说明的是距离过期还剩这个是按照当前时间来计算,还剩多少天过期。

import socket
import ssl
import datetime
# author 波哥(IT运维技术圈)
# 域名列表
DOMAIN_LIST = [
    "www.98dev.com",
    "www.baidu.com",
    "www.yahoo.com",
    "www.microsoft.com"
]

# 解析IP地址
def resolve_domain(domain):
    try:
        ips = socket.getaddrinfo(domain, None)
        return [ip[4][0] for ip in ips]
    except:
        return []

# 获取证书信息
def get_certificate_info(domain):
    context = ssl.create_default_context()
    with socket.create_connection((domain, 443)) as sock:
        with context.wrap_socket(sock, server_hostname=domain) as sslsock:
            cert = sslsock.getpeercert()
            subject = dict(x[0] for x in cert['subject'])
            issued_to = subject.get('commonName')
            issuer = dict(x[0] for x in cert['issuer'])
            issued_by = issuer.get('organizationName')
            valid_from = datetime.datetime.strptime(cert['notBefore'], '%b %d %H:%M:%S %Y %Z')
            valid_to = datetime.datetime.strptime(cert['notAfter'], '%b %d %H:%M:%S %Y %Z')
            expire_days = (valid_to - datetime.datetime.utcnow()).days
            return (issued_to, valid_from, valid_to, expire_days, issued_by)

# 打印结果
def print_result(domain, info):
    print("="*50)
    print("Domain: {0}".format(domain))
    print("通用名: {0}".format(info[0]))
    print("生效日期: {0}".format(info[1]))
    print("到期日期: {0}".format(info[2]))
    print("距离过期还剩: {0} 天".format(info[3]))
    print("颁发机构: {0}".format(info[4]))
    ips = resolve_domain(domain)
    if ips:
        print("解析地址: {0}".format(", ".join(ips)))
    else:
        print("解析地址: N/A")
    print("="*50)

# 主程序
if __name__ == "__main__":
    for domain in DOMAIN_LIST:
        try:
            info = get_certificate_info(domain)
            print_result(domain, info)
        except:
            print("无法获取域名 {0} 的证书信息".format(domain))

执行效果如下:

a0c3c62d550026abb53a62aa374a7d81.png

别忘了给波哥一个三连!

波哥

IT行业近二十年的IT老炮。常年潜伏于国企、各一二线大厂中。硬件集成入行,直至虚拟技术、容器化。岗位历经系统集成、DBA、全栈开发、sre、项目经理、产品经理、部门总监。

主要作品:
  • IT类资源汇聚门户:https://www.98dev.com

  • 各大短视频平台:98dev

  • 各大主要技术论坛博客:IT运维技术圈

  • 长视频教学作品:《波哥讲网络》《波哥讲git》《波哥讲gitlab》

  • 小程序:IT面试精选

  • 构建技术社区:+V itboge1521 入学习交流群

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值