gpt4 book ai didi

python - SSL : certificate_verify_failed时获取证书信息

转载 作者:太空宇宙 更新时间:2023-11-04 07:53:15 24 4
gpt4 key购买 nike

<分区>

我需要从一堆具有自签名证书的设备中读取颁发者 CN。有些错误导致发行人 CN 在应该是唯一的时候并不是唯一的,我希望确定哪些有这种情况。我找到了一个代码片段 here并稍微修改一下:

import ssl, socket

myhostname = 'some_host'
myctx = ssl.create_default_context()
myctx.check_hostname = False
myctx.verify_mode = ssl.CERT_NONE # ssl.CERT_OPTIONAL
s = myctx.wrap_socket(socket.socket(), server_hostname=myhostname)
s.connect((hostname, 443))
cert = s.getpeercert()

当 verify_mode 为 CERT_NONE 时,建立连接但丢弃证书;当 CERT_OPTIONAL 连接失败时,因为验证失败。

如何在不使用 openssl 的情况下连接到错误证书并从中读取详细信息?

这是一个一次性解决问题的脚本;我只需要输出 some_host 和 issuer CN。 Openssl 在此系统上不可用。

EDIT 1 按照 Patrick 的 PyOpenSSL 建议(也不在此系统上)this post表示 cert = s.getpeercert(binary_form=True) 返回 DER 格式的证书。

EDIT 2 重复还是不重复?最终我认为是的,它是一个副本,但不是指定的“副本”,因为我的系统上没有 Openssl。我相信它仍然有用。下面的工作解决方案使用来自多个 other 的信息posts一路上和其他几个人一起。简洁的一点是使用 ssl.get_server_certificate(感谢 Steffen,不需要 getpeercert;返回 pem 而不是 der),丑陋的一点是将证书存储到文件中,然后使用未记录的方法获取详细信息。它不使用 getpeercert 也不使用 openssl。

如果有更简洁的方法来处理收到的 pem 证书以阅读详细信息,我很想知道,但它对我来说已经足够好了。

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com