我刚刚从python.org安装了Python3,并且无法安装包pip.根据设计,网络上有一个中间人的数据包检测设备,通过使用自己的证书重新签名所有ssl连接来检查所有数据包(包括ssl).部分GPO将自定义根证书推送到Windows密钥库.
使用Java时,如果我需要访问任何外部https站点,我需要手动更新JVM中的cacerts以信任自签名CA证书.
我如何为python实现这一目标?现在,当我尝试安装软件包时pip,可以理解,我得到了很多[SSL: CERTIFICATE_VERIFY_FAILED]错误.
我意识到我可以使用--trusted-host参数忽略它们,但我不想为我正在尝试安装的每个包执行此操作.
有没有办法更新python使用的CA证书存储?
import requests
data = {'foo':'bar'}
url = 'https://foo.com/bar'
r = requests.post(url, data=data)
Run Code Online (Sandbox Code Playgroud)
如果URL使用自签名证书,则会失败
requests.exceptions.SSLError: [Errno 1] _ssl.c:507: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
Run Code Online (Sandbox Code Playgroud)
我知道我可以传递False给verify参数,如下所示:
r = requests.post(url, data=data, verify=False)
Run Code Online (Sandbox Code Playgroud)
但是,我想要做的是将请求指向磁盘上的公钥副本,并告诉它信任该证书.
我在从 HuggingFace 加载预训练模型时遇到以下问题。
HTTPSConnectionPool(host='huggingface.co', port=443): Max retries exceeded with url: /roberta-base/resolve/main/config.json (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1125)')))
Run Code Online (Sandbox Code Playgroud)
导致问题的行是
tokenizer = AutoTokenizer.from_pretrained('roberta-base')
Run Code Online (Sandbox Code Playgroud)
我以前从未遇到过这个问题,而且之前工作得非常好。我一无所知。
python-3.x tensorflow2.0 huggingface-transformers huggingface-tokenizers
我注意到了一件很有趣的事情.每当我在我的公司访问像chase.com这样的启用SSL的网站时.SSL证书不是来自VeriSign这样的知名CA,而是来自我公司的IT部门.对于每个互联网访问,我们使用动态代理(我不知道如何解释,但我们不需要在IE->连接部分确定).我猜测代理将SSL证书更改为我们自己的IT证书.我的猜测:每次SSL连接启动时,代理接受我的HTTPS请求,从网站上获取证书(让我们称之为SSL_Chase,SSL和数据加密的对称密钥),将证书更改为我们自己的IT证书(让我们称之为SSL_IT)并将其与respose一起发送给我.我填写用户名和passowrd,我的机器使用SSL_IT加密我的数据,我们的代理得到它并且解密它.然后代理使用SSL_Chase加密它并发送到chase.所以追逐认为我们的代理是我,我认为我们的代理是追逐,除了IT证书不是追逐(我认为大多数用户不会注意到它).这意味着,IT部门知道我们发送的一切追逐和追逐发送给我!从SSL连接算法的角度来看,我想知道我的猜测是否可行.希望有人能给我一个暗示.
非常感谢!