Python中无效证书获取证书信息

2023-12-12

我正在编写一个 Python 2.7.13 (Win x64) 脚本来验证 SSL 证书并发出问题警报。但是,我遇到了一个问题,即仅当证书有效时脚本才会返回信息。

如果证书无效,我会收到 CERTIFICATE_VERIFY_FAILED SSL 错误。通常,当出现错误时,我会简单地使用 try/catch 并警告证书无效,但这里的问题是我需要证书过期的实际日期。

Per https://docs.python.org/2/library/ssl.html我尝试使用 conn._https_verify_certificates(enable=False) 禁用证书验证,但收到属性 _https_verify_certificates 不存在的错误。

到目前为止,这是我的代码。我确信我错过了一些明显的东西。当然,Python 可以在不验证 SSL 证书的情况下提取它,对吧?

import socket
import ssl

def ssl_expiry_datetime(hostname):
    ssl_date_fmt = r'%b %d %H:%M:%S %Y %Z'

    context = ssl.create_default_context()
    conn = context.wrap_socket(
        socket.socket(socket.AF_INET),
        server_hostname=hostname,
    )
    # 3 second timeout because Lambda has runtime limitations
    conn.settimeout(3.0)
    #conn._https_verify_certificates(enable=False)
    conn.connect((hostname, 443))
    ssl_info = conn.getpeercert()
    # parse the string from the certificate into a Python datetime object
    return ['notAfter']

myhost = 'www.google.com'

print ssl_expiry_datetime(myhost)

非常感谢!!!!


经过大量试验和错误后,我发现您可以使用以下命令关闭 SSLcertificate 主机名验证检查主机名特征。

context.check_hostname = False

如果目标与 SSL 证书上的通用名称 (CN) 不匹配,这将允许您的程序连接到 Web 服务器。但是,当 Web 服务器使用无效的 SSL 证书时,连接将失败并引发 ConnetionError 错误。如果目标是获取所有 SSL 证书,甚至是无效的证书,则以下解决方案只能部分满足您的需求.

这是一个建议的解决方案:

import socket, ssl

def ssl_expiry_datetime(hostname):
    ssl_date_fmt = r'%b %d %H:%M:%S %Y %Z'

    context = ssl.create_default_context()
    context.check_hostname = False
    conn = context.wrap_socket(
        socket.socket(socket.AF_INET),
        server_hostname=hostname,
    )
    # 3 second timeout because Lambda has runtime limitations
    conn.settimeout(3.0)
    #conn._https_verify_certificates(enable=False)
    conn.connect((hostname, 443))
    ssl_info = conn.getpeercert()
    # parse the string from the certificate into a Python datetime object
    return ['notAfter']

myhost = 'example.com'

print ssl_expiry_datetime(myhost)

或者,您可以使用requests库,它允许您完全关闭验证。

参考:

  1. 21.6。 urllib.request — 用于打开 URL 的可扩展库 -https://docs.python.org/3/library/urllib.request.html#urllib.request.urlretrieve
  2. 17.3.3。 SSL 上下文 -https://docs.python.org/2/library/ssl.html#ssl-contexts
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python中无效证书获取证书信息 的相关文章

随机推荐

  • 极限算子的关系代数

    这两个 SQL 查询的关系代数是什么 Select from film where film rating PG limit 20 我们如何显示极限 Select from actor country where first name BO
  • 通用数据库设计方法

    我面对客户的应用程序如下所示 它允许最终用户输入 材料 对于这些材料 他们可以附加任意数量的 属性 属性可以具有任何类型的值 decimal int dateTime 和 varchar 长度从 5 个字符到大块文本不等 本质上 架构如下所
  • ios,从视图获取指向控制器的指针

    我正在尝试制作一个 ios UI 元素 我可以将屏幕上的项目拖动到 tableView 上 tableView 将添加相应的元素 我使用 hitTest 函数来识别我将元素拖动到哪个视图 并且工作正常 我的问题是 当我需要指向 tableV
  • 如何在 android 2.2 模拟器或 android 2.1 设备中使用地理编码器

    我需要使用地理编码器从 google map am 的地址获取 lang 和 lat am 在 android sdk 2 2 中工作 使用地理编码器无法正常工作 它会抛出异常 如何在我的应用程序中使用地理编码器 或任何其他可用于获取经度和
  • 无法在 Linux 上的 SQL Server 2017 Express 上启用 xp_cmdshell

    我正在尝试启用xp cmdshell在 Linux RedHat 7 4 上运行的 SQL Server 2017 Express 上 我正在跟进本指南 并出现以下错误 此版本不支持指定的选项 xp cmdshell SQL Server
  • 如何将私有 pdb 转换为公共 pdb?

    我有私有 pdb 文件 我必须将其转换为公共文件 有工具吗 Use PDBCopy pdbcopy 是 Windows 调试工具的一部分 可通过视窗软件开发工具包
  • 发生错误时如何不让 Flask 服务器崩溃? [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我使用flask制作了一个API应用程序 它接受一个数字 十进制 作为输入并返回一些字符串 如果我发送一个字符串 这个应用程序就会中断 并且在重新启动后可以正常工作 我不想每次在
  • Xcode 10 GM 多命令产生... Pods 问题

    刚刚切换到 xcode 10 Golden Master 并开始在我的一个 pod 中出现错误 FDTake Tried this线程 但我在构建阶段没有 plist 所以它不起作用 这个问题与 pod 有关吗 Showing All Me
  • getImageData 导致“未捕获错误:NOT_SUPPORTED_ERR:DOM 异常 9”

    我正在尝试了解 HTML5 中的一些图像处理 我发现当我尝试使用 getImageData 方法时 我会抛出此 JS 异常 我正在使用 Chrome 并在本地主机上运行 Thanks 好吧 找出问题所在了 我只想说 德普 我正在使用 get
  • 在 Python 中使用 BeautifulSoup 查找 html 标签

    我想在html代码中找到一个特定的标签 比如如果有2个标签 那么我怎样才能获取第二个标签的内容而不是第一个标签的内容 soup find id contact1 在这里是示例html代码 table align center th STUD
  • RestKit RKMappingTest JSON 数组

    我正在使用 RestKit gt 0 20 3 和 RestKit Testing gt 0 20 3 这是我的映射的一个示例 RKObjectMapping mapping RKObjectMapping mappingForClass
  • 使用数组中的参数调用函数 - apply() 而不使用上下文参数?

    是否有任何方法可以调用函数但设置上下文this当我通过执行以下操作调用该函数时它具有的 默认 值fn 此方法应该接受一个数组并将单个元素作为参数传递给函数 就像 apply 所做的那样 emitter new EventEmitter ar
  • 什么是 RSA 主机密钥?

    我收到这条消息说 将 IP 地址 192 30 252 130 的 RSA 主机密钥永久添加到已知主机列表中 RSA 密钥的含义是什么以及已知主机背后的概念是什么 RSA密钥是基于RSA算法的私钥 私钥用于在建立 SSL TLS 会话期间进
  • Rails:查询按除 0 之外的数字对记录进行排序

    我根据优先级 升序 排列数据 其中 0 在优先级中被忽略 下面是 Rails 查询 Profile where active true order priority pluck priority 此查询返回优先级从 0 开始的有序记录列表
  • geom_tile 图的可变大小

    I have a code that takes in positional data as well as values at that positional data and then plots it with geom tile T
  • 从连接到 Google Functions 的端点调用时,Firebase ID 令牌具有不正确的“aud”(受众)声明

    我使用 Google Endpoints 作为 API 网关 该网关在 Google Run 容器服务中运行 API 路径指向 Google 函数 node js 对 API 网关的调用来自 Web 应用程序 即浏览器 其中一条路径是 lo
  • 在 asset:install 和 assetic:dump 之后,Fontawesome 字体失败

    我正在尝试建立一个我正在共享托管上工作的网站 一切正常 但 FontAwesome 图标 因为 Symfony 找不到它们应该在的位置 我按照以下步骤将网站移动到生产共享托管 由于 SH 不允许符号链接 因此将资产发布为硬拷贝 因此我运行此
  • 根据权重分布从列表中随机选择 N 个项目的最快算法是什么?

    我有一个很大的物品清单 每个物品都有一个重量 我想随机选择N个项目而不放回 而权重较大的项目更有可能被选择 我正在寻找最有效的想法 性能至关重要 有任何想法吗 如果你想样品项目无需更换 你有很多选择 使用加权选择替换算法来选择随机索引 有很
  • JTabel 单个单元格文本对齐

    基本上我有一个JTable 和这个JTabel将在一个单元格中包含一种产品 然后在其正下方的单元格中包含成本 产品名称应左对齐 产品成本应向右对齐 我实际上并不关心每行中其他单元格的对齐方式 所以我需要设置单个单元格或单个行的对齐方式 我找
  • Python中无效证书获取证书信息

    我正在编写一个 Python 2 7 13 Win x64 脚本来验证 SSL 证书并发出问题警报 但是 我遇到了一个问题 即仅当证书有效时脚本才会返回信息 如果证书无效 我会收到 CERTIFICATE VERIFY FAILED SSL