Python请求抛出SSL错误
以下是以下内容: 我刚刚在Mac OSX 10.8.5上安装了Python请求抛出SSL错误,python,macos,ssl,python-requests,Python,Macos,Ssl,Python Requests,以下是以下内容: 我刚刚在Mac OSX 10.8.5上安装了请求。我第一次尝试执行请求时失败,因为缺少证书: SSLError:[Errno 1]\u ssl.c:504:error:14090086:ssl例程:SSL3\u GET\u SERVER\u证书:证书验证失败 上面的线程说要查找/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/requests/cacert.pem但实
请求
。我第一次尝试执行请求时失败,因为缺少证书:
SSLError:[Errno 1]\u ssl.c:504:error:14090086:ssl例程:SSL3\u GET\u SERVER\u证书:证书验证失败
- 上面的线程说要查找
/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/requests/cacert.pem
但实际上我甚至没有../site packages/requests
目录。我不清楚这是否应该由安装添加(我使用了pip
)
- 进一步的线程和
请求
文档说要安装certifi
,我就这么做了。但现在我得到了一个不同的错误:
python -c 'import requests; requests.get("https://api.github.com/events")' /usr/lib/anaconda/lib/python2.7/site-packages/requests/packages/urllib3/util/ssl_.py:90: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning.
InsecurePlatformWarning
Traceback (most recent call last):
...
File "/usr/lib/anaconda/lib/python2.7/site-packages/requests/adapters.py", line 431, in send
raise SSLError(e, request=request)
requests.exceptions.SSLError: [Errno 1] _ssl.c:504: error:0D0890A1:asn1 encoding routines:ASN1_verify:unknown message digest algorithm
谢谢 注意,您使用的是HTTPS
。如报告中所述
要检查主机的SSL证书,可以使用verify参数[…],默认情况下,verify设置为True
这里有几种方法可以解决这个问题:
更新OpenSSL(可能会解决您的问题)
摘自:
如果遇到以下错误之一:
error:0D0890A1:asn1 encoding routines:ASN1_verify:unknown message digest algorithm
error:0D0C50A1:asn1 encoding routines:ASN1_item_verify:unknown message digest algorithm
The software you are using might be compiled with a version too old of OpenSSL that does not take certificates signed with sha256WithRSAEncryption into account.
对于SHA256的全面管理,至少需要OpenSSL 0.9.8o。OpenSSl 0.9.7m仅确保服务器的部分管理
仅限模式
通过检查您的openssl
版本
如果您的版本小于OpenSSL0.9.8o,则必须更新其版本(OS X):
如果不起作用,请尝试以下方法:
brew uninstall openssl
rm -rf /usr/local/openssl
brew install openssl
- 在
OSX10.10.3
之前安装的openssl
有一个问题,重新安装它可以解决这个问题
- 这些命令行将卸载
openssl
,从硬盘中删除其文件夹并重新安装(更新版本)
安装certifi
取自
默认情况下,请求捆绑一组它信任的根CA,来源于
来自Mozilla信任商店。但是,这些仅更新一次
每个请求版本。这意味着,如果您锁定请求版本
您的证书可能会变得非常过时
从请求版本2.4.0开始,请求将尝试使用
来自certifi的证书(如果系统上存在)。这允许
允许用户更新其受信任的证书,而无需
更改在其系统上运行的代码
为了安全起见,我们建议经常升级certifi
换句话说,如果您有请求2.4.0
或更新版本,请尝试安装certifi
:
pip install certifi
希望这能解决问题
使用不同版本的OpenSSL和请求
通过使用Google查看,我发现Python 2中的OpenSSL存在一个问题:
但是,我正在使用Python 2.7.6
,请求2.2.1
和OpenSSL 1.0.1f 2014年1月6日
,并且一切都正常运行
通过证书
在其他情况下,您可能需要告诉请求。如果主机的证书是由您签署的,则获取证书文件的路径
requests.get("https://api.github.com/events", verify=True, cert=['/path/to/my/ca.crt'])
将verify参数设置为False(不推荐!)
如果要避免证书验证,必须将verify=False
传递给请求.get
方法
python -c 'import requests; requests.get("https://api.github.com/events", verify=False)'
或者从script.py
文件:
import requests
res = requests.get("https://api.github.com/events", verify=False)
print res
终端:
$ python script.py
<Response [200]>
$python script.py
重要的:非常糟糕的想法;您可能会受到攻击,这是一个严重的安全漏洞。您的问题是什么?您需要清楚地指定希望社区帮助您解决的问题。这种错误在较旧的OpenSSL版本和使用SHA-256签名的证书中很常见。您正在使用哪个版本的OpenSSL(OpenSSL版本
)?OpenSSL 0.9.8y 2013年2月5日
请不要建议在不描述负面影响的情况下禁用证书验证(中间人攻击)它应该只用于测试,或者如果安全性不相关的话。@SteffenUllrich,但我就是这么做的。我没有提到MITMA,但我说了“相信主人”。这还不够好吗?这不是信任主人的问题。TLS没有说明主机的可信程度,只有在证书与主机名匹配并且由可信CA颁发时才这样做。您可能不信任attacker.example.com
,但证书可能仍然可以使用。禁用验证的问题是,您根本不知道是否与主机对话。@SteffenUllrich,您可以查看我更新的帖子吗?是的,我使用的是https——这是requests文档中的示例。
import requests
res = requests.get("https://api.github.com/events", verify=False)
print res
$ python script.py
<Response [200]>