gpt4 book ai didi

Python 使用系统 SSL 证书?

转载 作者:太空宇宙 更新时间:2023-11-03 11:02:01 25 4
gpt4 key购买 nike

我遇到了最近的 Authorize.net SSL 证书失效 debacle上周。

我终于能够让 curl 接受他们的证书:

$ curl -Iv https://secure.authorize.net
...
* SSL certificate verify ok.
...

但是 python 仍然拒绝它的请求:

>>> requests.get('https://secure.authorize.net', verify=True)
...
InsecurePlatformWarning

在我的代码中:

File "/usr/lib/python2.7/ssl.py", line 405, in do_handshake
self._sslobj.do_handshake()
SSLError: [Errno 1] _ssl.c:510: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

谁能告诉我为什么 python 似乎没有使用系统证书进行验证?关于修复的任何想法?

编辑

我正在使用 Ubuntu 并以这种方式安装证书:

sudo curl -o /usr/local/share/ca-certificates/entrust_ssl_ca.crt https://www.entrust.net/downloads/binary/entrust_ssl_ca.cer
sudo update-ca-certificates

运行后,curl 正常工作,但 python 仍然无法识别证书。

最佳答案

您没有提及您使用的是什么操作系统,也没有提及您安装证书的位置以使它们对 Curl 可用。

我在我的系统上使用 strace 来查看 Python 在哪里寻找证书。在我的 Fedora 系统上,Python 使用 /etc/pki/tls/certs/ca-bundle.crt,这是 Fedora、Red Hat 和类似系统上的标准位置。

在 Ubuntu 上,Python 正在寻找 /etc/ssl/certs/ca-certificates.crt

根据 the documentation :

You can pass verify the path to a CA_BUNDLE file with certificates of trusted CAs. This list of trusted CAs can also be specified through the REQUESTS_CA_BUNDLE environment variable.

...因此您可以为您的应用程序提供独立于系统上安装的 CA 证书的列表。

更新

运行 openssl s_client -showcerts -connect secure.authorize.net:443 显示 *.authorize.net 证书由“委托(delegate)证书颁发机构 - L1K”签署"证书,由“委托(delegate)根证书颁发机构-G2”证书签名,由“委托(delegate)根证书颁发机构”证书签名。您作为 entrust_ssl_ca.crt 安装的证书是“Entrust.net Secure Server Certification Authority”,即“以上都不是”。

我只想访问 http://www.entrust.com/get-support/ssl-certificate-support/root-certificate-downloads/并下载所有内容,但上面链中的顶级证书是 this one .这是下载页面上列出的第二个证书。

关于Python 使用系统 SSL 证书?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30577392/

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