gpt4 book ai didi

Python 请求 SSL 主机名不匹配错误

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

我一直在尝试使用 python 请求库访问使用 SSL 保护的 API,如下所示

requests.get('https://path/to/url',cert=('cert.pem','key.pem'),verify='ca.pem')

但是我得到一个错误

File "/usr/lib/python2.7/dist-packages/requests/adapters.py", line 385, in send
raise SSLError(e)
requests.exceptions.SSLError: hostname '10.10.10.10' doesn't match u'*' # IP address is not real.

如果我的理解是正确的,这个证书可以用于任何服务器,因为它们是用“*”作为域签名的。

我猜 requests 库正在严格匹配主机名验证而不是正则表达式匹配。

所以我的问题是它是否是 requests 库的错误,或者这是缩进的工作方式?

当我使用下面给出的 curl 命令时,它工作得非常好。

curl https://path/to/url  --cert cert.pem  --key key.pem --cacert ca.pem

所以我有两种可能性,要么 curl 库没有执行主机名验证,要么他们正在使用正则表达式进行验证。

我哪里错了?期待详细解答

最佳答案

如何匹配通配符在RFC 2818中有描述。 ,在 RFC 6125 中有更准确的说明CAB baseline requirements中也有信息.最后,浏览器执行以下操作:

  • 只有最左边的标签可以有通配符,并且通配符只能匹配一个标签。那就是不可能使用 **.*.example.com 等通配符。此外,*.example.com 匹配 www.example.com 但不匹配 sub.www.example.comexample.com
  • 此外还有一些限制取决于公钥后缀,即没有浏览器允许 *.com 的通配符,有些浏览器不允许 *.co.uk 的通配符到。
  • 通配符在证书中的位置有限制。所有主题替代名称部分都支持通配符,但并非所有都允许通用名称中的通配符。
  • 除此之外,通配符仅用于主机名。这意味着不允许将 IP 地址与通配符条目进行匹配。要将 IP 地址包含在证书中,您必须使用 iPAdress 作为主题备用名称(除 IE 之外的所有浏览器)或 dNSName(除 IE 之外的任何浏览器)或 IP 地址必须在 CN 中(除 Safari 之外的所有浏览器)。

像 python 这样的几种语言在过去根本没有对主机名进行任何检查,但是 2.7.9 python 也默认检查主机名并且有一个与浏览器所做的大部分兼容的实现。

至于curl:这取决于你使用的curl版本。 7.36 应该没问题,但旧版本有 flaws in the validation .

关于Python 请求 SSL 主机名不匹配错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33429453/

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