【发布时间】:2021-07-09 20:12:12
【问题描述】:
我正在尝试运行一个连接到 myhost.comapny.com:8443 的 python 脚本,但它在运行时给出了 SSL 证书错误
(Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl.c:1122)')))
我的代码如下:
import requests
url = "https://myhost.comapny.com:8443/environments/test/deplpyments"
payload={}
files=[
('request',('test.yaml',open('test.yaml','rb'),'application/octet-stream'))
]
headers = {
'Content-Type': 'multipart/form-data',
'Authorization': 'token'
}
response = requests.request("POST", url, headers=headers, data=payload, files=files,verify="/user/test/company.cert")
print(response.text)
我已将证书添加为:
openssl s_client -showcerts -connect myhost.comapny.com:8443 </dev/null 2>/dev/null | openssl x509 -text >company.cert
但它仍然无法正常工作,并且出现与 SSL 验证失败相同的错误。似乎我没有正确生成证书。有人可以指出我该如何正确地做到这一点吗?
【问题讨论】:
-
这能回答你的问题吗? Python SSL certificate verify error
-
不。我更想知道如何生成我可以提供给请求的证书?看来我生成错误了。我的代码很好,没有任何问题。
-
为什么需要生成证书?证书是由网站所有者生成的,而不是由网站发出请求的客户。
-
我们需要在客户端添加受信任的证书,同时调用服务器对吗?在 java 中,我按上述方式在 caerts 中使用 keytool 添加。在 python 中,我可以使用 pip 添加,由于某些限制,我不想尝试。所以我手动尝试将证书放入请求中,因为它是 python 允许的
-
是的。正如我前面提到的那样,我把它们放在了错误的方式
标签: python python-3.x python-requests ssl-certificate cacerts