- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
简短描述:当使用自己的 cabundle 连接到服务器时,python 请求不断抛出 SSL: CERTIFICATE_VERIFY_FAILED:
In [1]: import requests
In [3]: requests.get('https://activeo.monitowl.com', verify=True)
Out[3]: <Response [200]>
In [4]: requests.get('https://activeo.monitowl.com', verify="./ca_bundle.crt")
---------------------------------------------------------------------------
SSLError Traceback (most recent call last)
<ipython-input-3-c92a3091d6ce> in <module>()
----> 1 requests.get('https://activeo.monitowl.com', verify="./ca_bundle.crt")
/home/vagrant/.virtualenvs/test/local/lib/python2.7/site-packages/requests/api.pyc in get(url, params, **kwargs)
67
68 kwargs.setdefault('allow_redirects', True)
---> 69 return request('get', url, params=params, **kwargs)
70
71
/home/vagrant/.virtualenvs/test/local/lib/python2.7/site-packages/requests/api.pyc in request(method, url, **kwargs)
48
49 session = sessions.Session()
---> 50 response = session.request(method=method, url=url, **kwargs)
51 # By explicitly closing the session, we avoid leaving sockets open which
52 # can trigger a ResourceWarning in some cases, and look like a memory leak
/home/vagrant/.virtualenvs/test/local/lib/python2.7/site-packages/requests/sessions.pyc in request(self, method, url, params, data, headers, cookies, files, auth, timeout, allow_redirects, proxies, hooks, stream, verify, cert, json)
463 }
464 send_kwargs.update(settings)
--> 465 resp = self.send(prep, **send_kwargs)
466
467 return resp
/home/vagrant/.virtualenvs/test/local/lib/python2.7/site-packages/requests/sessions.pyc in send(self, request, **kwargs)
571
572 # Send the request
--> 573 r = adapter.send(request, **kwargs)
574
575 # Total elapsed time of the request (approximately)
/home/vagrant/.virtualenvs/test/local/lib/python2.7/site-packages/requests/adapters.pyc in send(self, request, stream, timeout, verify, cert, proxies)
429 except (_SSLError, _HTTPError) as e:
430 if isinstance(e, _SSLError):
--> 431 raise SSLError(e, request=request)
432 elif isinstance(e, ReadTimeoutError):
433 raise ReadTimeout(e, request=request)
SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:581)
In [5]: requests.get('https://activeo.monitowl.com', verify="./ca_bundle_ff.crt")
[same error]
In [7]: import ssl; ssl.OPENSSL_VERSION
Out[7]: 'OpenSSL 1.0.1k 8 Jan 2015'
In [8]: import sys; print (sys.version)
2.7.9 (default, Mar 1 2015, 12:57:24)
[GCC 4.9.2]
In [2]: requests.__version__
Out[2]: '2.7.0'
我们正在使用 MonitOwl 中的请求代理与 API 服务器通信。几天前,我们为 *.monitowl.com 订购了新证书并将其部署到新实例,我们的颁发者是 nazwa.pl
。将网络浏览器指向 https://activeo.monitowl.com工作完美,请求似乎有一些问题,当设置 verify="./cabundle.crt"时。
在处理 ssl 的 tornado 服务器前面有一个“透明”的 haproxy 检查 SNI 并重新分配流量,配置文件的一部分:
acl app_activeo req_ssl_sni -i activeo.monitowl.com
use_backend bk_activeo if app_activeo
我们需要提供自己的 cabundle 来控制接受的内容 - 因为安全问题和部署脚本。我们到处都在使用 debian jessie。
我用 ssl checker 测试了服务器除了接受旧的加密算法之外没有任何问题..
# from issuer https://panel.nazwa.pl/uploads/ssl/nazwaSSL_SHA-2.zip
$ cat monitowlcom.crt nazwasslsha2.pem certumca-ctncasha2.pem gscasha2.pem > ./ca_bundle.crt
# exported from firefox
$ cat monitowl.com nazwaSSL CertumTrustedNetworkCA CertumGlobalServicesCASHA2 > ca_bundle_ff.crt
$ openssl verify -untrusted ./ca.crt monitowlcom.crt
monitowlcom.crt: OK
$ c_rehash ./
$ openssl s_client -CApath ./ -connect activeo.monitowl.com:443 -servername activeo.monitowl.com
CONNECTED(00000003)
depth=4 C = PL, O = Unizeto Sp. z o.o., CN = Certum CA
verify return:1
depth=3 C = PL, O = Unizeto Technologies S.A., OU = Certum Certification Authority, CN = Certum Trusted Network CA
verify return:1
depth=2 C = PL, O = Unizeto Technologies S.A., OU = Certum Certification Authority, CN = Certum Global Services CA SHA2
verify return:1
depth=1 C = PL, O = nazwa.pl S.A., OU = http://nazwa.pl, CN = nazwaSSL
verify return:1
depth=0 C = PL, CN = *.monitowl.com, emailAddress = ***@whitehats.pl
verify return:1
[...]
* Verify return code: 0 (ok)*
$ curl -I --cacert ca_bundle.crt https://activeo.monitowl.com
HTTP/1.1 200 OK
$ curl -I --cacert ca_bundle_ff.crt https://activeo.monitowl.com
HTTP/1.1 200 OK
如您所见,openssl s_client
验证连接,curl 工作正常。
在服务器端( Tornado ):
SSLError: [SSL: TLSV1_ALERT_UNKNOWN_CA] tlsv1 警报未知 ca (_ssl.c:581)
我请一些 friend 使用从网络浏览器导出的包对其进行测试,并且:
Python==2.7.9 + OpenSSL==1.0.1k => FAILS
Python==2.7.10 + OpenSSL==1.0.1k => FAILS
Python==2.7.9 + OpenSSL==1.0.1l => FAILS
Python==2.7.10 + OpenSSL==1.0.1p => WORKS
Python==2.7.10 + OpenSSL==1.0.2d => WORKS
Python==2.7.9 + OpenSSL 1.0.2d => WORKS
我知道 python 会验证证书 differently比网络浏览器,但看起来它不是这里的东西。
您是否知道 bundle 出了什么问题?我还能检查什么?
这是一个错误?在请求中,openssl、python 还是 urllib3?
最佳答案
不要使用你的 ca 包文件。尝试使用 verify=True
并将您的证书文件的内容粘贴到/usr/local/lib/python2.7/dist-packages/requests/cacert.pem 的底部,位置取决于您的Linux 版本或 dist(CentOS、Debian 等)。请使用find/-name requests
来定位requests 在您系统中的安装位置,然后找到cacert.pem。
这是因为 Requests 默认使用这个 cacert.pem 作为它自己的 ca 包。
如果这不起作用,那么您应该获取高级颁发者证书作为证书文件。
关于python - 请求 SSL : CERTIFICATE_VERIFY_FAILED with verify ="./cabundle.crt",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32761774/
你知道为什么会调用 badCertificateCallback 吗?证书( Dart 声称无效)与我设置为受信任证书的证书完全相同(相等性检查为真!)。 import 'dart:convert';
我最近将一个项目从 1.22.1 升级到 1.24.3。随后,pub get 失败了 Handshake error in client (OS Error: CERTIFICATE_VERIFY_F
我有一个使用 VirusTotal API 的 python 脚本。它一直没有问题,但是当我运行脚本时突然出现以下错误: urllib2.URLError: 我认为可能是我们的网络代理导致了这个问题
我使用以下代码通过 XMLRPC api 与 Magento 网上商店进行交互。 Magento API Python XMLRPC 一切正常,直到我们将 Web 服务器更改为 SSL 现在我收到以下
在使用 Windows 8.1 的相当新的机器上使用 Python 2.7.12 连接到 www.mydomain.com 时出现错误。错误是 SSL: CERTIFICATE_VERIFY_FAIL
我正在尝试创建一个虚拟环境,过去我可以通过诗歌安装来做到这一点。但是现在当尝试执行 poetry install 时,我收到了这条消息: Max retries exceeded with url:
我使用 python + boto3 在 bitbucket 管道中为 AWS IOT 运行测试脚本 直到最近它工作正常,现在我收到以下错误: Traceback (most recent call
这个问题在这里已经有了答案: youtube-dl gave me an error about ssl (2 个回答) 去年关闭。 我在 Python 中运行了这段代码: from __future
我正在尝试按照 Google 的文档构建我自己的 Android 版本,但它在“repo init”状态下失败(第 2 部分的第 2 步): https://source.android.com/so
好吧,我正在尝试为我的旅馆 wifi 创建一个自动登录脚本,我需要登录到 wifi 才能获得网络访问权限。如果我连接到 wifi,该网页在本地网络上保持打开状态。我只需要访问该网页并在那里登录即可。所
所以我目前正在制作一个 Xamarin.Android 应用程序,一段时间以来它一直使用我制作的 REST API 来与数据来回通信。 不过,我最近将我的 SSL 证书切换到了 LetsEncrypt
在证书有效的某些站点上,在 python 3.5 中使用 urllib3 发出 GET 请求失败并出现错误 CERTIFICATE_VERIFY_FAILED。 import certifi impo
我正在努力解决这个问题 requests.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed
from lxml import html import requests url = "https://website.com/" page = requests.get(url) tree = h
我对我学校网站的请求有疑问。我在网上搜索了解决方案,但没有一个对我有用。我已经通过 pip 安装了 certifi,它不起作用。我已经重新安装了 openssl,但它不起作用。 >>> import
更新 (2019-02-07):issue现已修复,因此如果您仍然遇到此问题,请尝试 gcloud components update。 在过去几个月的某个时候,我的 bq 工具停止工作了。即使是一个
我正在使用 python 2.7.10 request = urllib2.Request(url, data=urllib.urlencode(params)) f = urllib2.urlope
如果这是一个愚蠢的问题,我深表歉意,但我一直在尝试自学如何使用 BeautifulSoup,以便我可以创建一些项目。 我正在关注此链接作为教程:https://www.youtube.com/watc
我本来想解决 [SSL: CERTIFICATE_VERIFY_FAILED] 问题,因为我使用 mac 和 python 3,很多人说我应该运行/Applications/Python\3.6/In
我收到以下错误: Exception in thread Thread-3: Traceback (most recent call last): File "/Library/Frameworks/
我是一名优秀的程序员,十分优秀!