ssl.get_server_certificate 在某些网站上的 SSL 错误,但在其他网站上没有

SSL Errors for ssl.get_server_certificate on some websites but not on others

所以我尝试使用以下方式获取一些域证书:(首先从 nmap 检索端口,然后我尝试使用 443)

ssl.get_server_certificate((hostname, port))

但对于某些域,例如以下域(仅其中几个):q1.insightsnow.redbull.com、mib-cdn.redbull.com、internauditdb-uux-d.redbull.com、smg20.redbull.com, ssmg11-q.redbull.com, pm.redbull.com。 对于这个子域和许多其他子域,我遇到了一堆不同的错误:

我需要提到的是,对于许多其他子域(大约 1000 个),一切正常,我可以获得他们的证书。但是对于其中的大约 200 个,我反复收到上面的错误,我无法在互联网上找到它们的来源。

你知道为什么我不能在那些网站上使用 ssl.get_server_certificate 或者我哪里做错了吗?

谢谢!

如果此处的站点需要 SNI,则大多数。 ssl.get_server_certificate 没有解决 SNI 是一个长期存在的问题 - 请参阅 and Python issue 36076。终于用3.10解决了:

$ python3.8 -c 'import ssl; print(ssl.get_server_certificate(("q1.insightsnow.redbull.com", 443)))'
...
ssl.SSLError: [SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1123)


$ python3.10 -c 'import ssl; print(ssl.get_server_certificate(("q1.insightsnow.redbull.com", 443)))'
-----BEGIN CERTIFICATE-----
MIIHnjCCBoagAwIBAgIRAPcBO50Fz5QaF+JxeyoL1vEwDQYJKoZIhvcNAQELBQAw
gZUxCzAJBgNVBAYTAkdCMRswGQYDVQQIExJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAO
...

对于较旧的 Python 版本,请参阅 的答案,了解如何在不使用 ssl.get_server_certificate 的情况下获取证书。

至于 smg20.redbull.com 和 ssmg11-q.redbull.com - 这些站点似乎首先无法从 Internet 访问,即它们也无法通过其他工具或浏览器访问。