当前位置: 首页 > 知识库问答 >
问题:

在python中使用请求时无法获取本地颁发者证书

淳于祺
2023-03-14

这是我的密码

import requests;
url='that website';
headers={
  'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
  'Accept-Language':'zh-CN,zh;q=0.9,en;q=0.8,ja;q=0.7',
  'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'
};
r = requests.get(url,headers=headers);
print(r);
print(r.status_code);

然后它遇到了这样一个问题:

请求。例外情况。SSLError:

HTTPSConnectionpool(host='www.xxxxxx.com',port=44 3):

最大重试超过与url: xxxxxxxx(造成的SSLError(SSLCertVerizationError(1,'[SSL:CERTIFICATE_VERIFY_FAILED]

证书验证失败:无法获取本地发行者证书(_ssl. c: 1045)'))

那我该怎么办?

共有3个答案

尉迟韬
2023-03-14

如果您使用的是macOS,请搜索“Install Certificates.command”文件(通常在Macintosh HD中)

您还可以使用“command”“break space”找到它,并在字段中粘贴“Install Certificates.command”。

如果您使用brew安装python,您的解决方案就是:brew安装python 3.6。1:[SSL:证书\u验证\u失败]证书验证失败

马新觉
2023-03-14

如果您已经尝试使用pip更新CA(root)证书:

pip install --upgrade certifi

或者已经下载了最新版本的cacert。pem来自https://curl.haxx.se/docs/caextract.html并替换了{Python\u Installation\u Location}\\lib\\site packages\\certifi\\cacert中的旧版本。pem但它仍然不起作用,那么您的客户端可能缺少信任链中的中间证书。

大多数浏览器可以使用证书中“Authority Info Access”部分中的URL自动下载中间证书,但Python、Java和openssl s_客户端不能。他们依靠服务器主动向他们发送中间证书。

如果你会说中文,你可以阅读这个令人敬畏的博客:https://www.cnblogs.com/sslwork/p/5986985.html并使用这个工具来检查中间证书是否由服务器发送/安装:https://www.myssl.cn/tools/check-server-cert.html

如果没有,您可以查看本文:https://www.ssl.com/how-to/install-intermediate-certificates-avoid-ssl-tls-not-trusted/

我们还可以在Linux中使用openssl来交叉检查此问题:

openssl s_client -connect yourwebsite:443

我目前解决这个问题的方法就像@Indranil的建议(https://stackoverflow.com/a/57466119/4522434):在浏览器中使用bas64X.509CER格式导出中间证书;然后使用记事本打开它,并将内容复制到cacert.pem的末尾{Python_Installation_Location}\\lib\\site-包\\认证\\cacert.pem

沃驰
2023-03-14

不建议在组织环境中使用验证=False。这实质上是禁用SSL验证。

有时,当您位于公司代理之后时,它会将证书链替换为代理的证书链。在cacert中添加证书。certifi使用的pem应该可以解决这个问题。我也有类似的问题。以下是我为解决这个问题所做的-

  1. 找到cacert.pem所在的路径-

如果没有,请安装认证。命令:pip Instationfi

import certifi
certifi.where()
C:\\Users\\[UserID]\\AppData\\Local\\Programs\\Python\\Python37-32\\lib\\site-packages\\certifi\\cacert.pem

在浏览器上打开URL。从URL下载证书链并另存为Base64编码。cer文件。

现在在记事本中打开cacert.pem,只需在末尾添加每个下载的证书内容(-开始证书--- *** ---结束证书-)。

 类似资料:
  • 问题内容: 这是我的代码 然后它遇到了这个: requests.exceptions.SSLError: HTTPSConnectionPool(host ='www.xxxxxx.com‘,port = 44 3): URL超过最大重试次数:xxxxxxxx(由SSLError(SSLCertVerificationError(1,’[[SSL:CERTIFICATE_VERIFY_FAILED

  • 我已经在Windows Apache服务器上安装了Mandrill PHP API。当试图发送电子邮件使用下面的代码我得到的错误: Mandrill_HttpError-对消息/发送模板的API调用失败:SSL证书问题:无法获取本地颁发者证书 我不清楚Mandrill如何连接到我的本地颁发者证书。我的web服务器确实具有有效的证书,并且可以成功显示HTTPS页面。 有什么想法吗?

  • 我有一个简单的链设置,在这种情况下可以成功验证: 然而,在这些情况下,我会遇到错误: 特别是无法获得颁发者证书。 不知道该怎么做。 在这里他们说: OpenSSL无法为颁发者(或TLS握手期间从web服务器接收的链中第一个证书的颁发者)找到用于验证签名的本地证书。 此问题通常由日志消息表示,例如“无法获得本地颁发者证书”或“自签名证书”。当一个证书被验证时,它的根CA必须被OpenSSL“信任”,

  • 我已经在stackoverflow上尝试了很多解决这个问题的方法,不幸的是,到目前为止,没有任何方法对我有效。 它始于作曲家安装。我的env详细信息如下所示: > 操作系统:Windows 7 PHP V 7.1.10,XAMPP版本 我正在运行MINGW64(它是与git v2.1.5一起安装的) 卷曲--版本 curl 7.56.1(x86_64-w64-mingw32)libcurl/7.5

  • 我正在Windows服务器2016上的wamp上使用洋红色社区版2.2。每当我尝试登录以通过系统同步您的Magento市场购买时 “SSL 证书问题:无法获取本地颁发者证书” 我尝试了这个论坛中其他一些线程中提供的解决方案来下载cacert。pem并在php.ini中执行以下设置 curl . cainfo = " C:\ wamp 64 \ bin \ PHP \ PHP 7 . 1 . 9 \

  • 我正在Windows7上运行PHP版本5.6.3作为XAMPP的一部分。 当我尝试使用Mandrill API时,我得到以下错误: 未捕获异常“Mandrill_HttpError”,消息为“API调用消息/send-template失败:SSL证书问题:无法获取本地颁发者证书” 我已经尝试了在StackOverflow上读到的所有内容,包括向php.ini文件添加以下内容: 当然可以从http: