gpt4 book ai didi

python - 为什么 Python 的 `requests` 拒绝我的浏览器接受的 SSL 证书

转载 作者:太空狗 更新时间:2023-10-30 00:50:13 25 4
gpt4 key购买 nike

我最近为我的站点获得了 SSL 证书:

https://ram.rachum.com/

它在浏览器中运行良好。但是对于 requests 失败了:

>>> import requests
>>> requests.get('https://ram.rachum.com')
Traceback (most recent call last):
File "<pyshell#1>", line 1, in <module>
requests.get('https://ram.rachum.com')
File "C:\Python27\lib\site-packages\requests\api.py", line 55, in get
return request('get', url, **kwargs)
File "C:\Python27\lib\site-packages\requests\api.py", line 44, in request
return session.request(method=method, url=url, **kwargs)
File "C:\Python27\lib\site-packages\requests\sessions.py", line 354, in request
resp = self.send(prep, **send_kwargs)
File "C:\Python27\lib\site-packages\requests\sessions.py", line 460, in send
r = adapter.send(request, **kwargs)
File "C:\Python27\lib\site-packages\requests\adapters.py", line 250, in send
raise SSLError(e)
SSLError: hostname 'ram.rachum.com' doesn't match either of '*.webfaction.com', 'webfaction.com'

为什么?为什么requests看的是webfaction证书,而不是我自己的证书,对ram.rachum.com是有效的?

最佳答案

您正在使用不支持 SNI(服务器名称指示)的请求库,但您在需要 SNI 的同一 IP 地址后面有多个 SSL 证书。您可以使用 openssl s_client 验证这一点。如果没有为 SNI 指定名称,服务器只会为该 IP 提供默认证书,即 *.webfaction.com:

openssl s_client -connect ram.rachum.com:443
...
0 ...CN=*.webfaction.com

但是如果您为 SNI 指定主机名,它会返回预期的证书:

openssl s_client -connect ram.rachum.com:443 -servername ram.rachum.com
...
0 ...CN=ram.rachum.com...

也许您还需要升级请求库和其他模块,请参阅 using requests with TLS doesn't give SNI support

关于python - 为什么 Python 的 `requests` 拒绝我的浏览器接受的 SSL 证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23164345/

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