我正在试图找出如何使用请求指定SSLContext。
理论上,我有两个函数应该做同样的工作,但是有请求的函数不能工作。
def func_OK(token):
ctx = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH,cafile='myCA.crt.pem')
ctx.load_cert_chain(certfile='myprivate.pem')
url = 'https://my_url.com'
hdr = {"Content-Type": "application/json","Authorization":"Bearer "+token}
data = '{"filterList":[{}]}'
bdata = data.encode('utf-8')
req = urllib.request.Request(url, headers=hdr)
resp = urllib.request.urlopen(req, data=bdata, context=ctx)
content = resp.read()
data = json.loads(content.decode('utf-8'))
def func_NOK(token):
import requests
url = 'https://my_url.com'
hdr = {"Content-Type": "application/json","Authorization":"Bearer "+token}
data = '{"filterList":[{}]}'
bdata = data.encode('utf-8')
resp = requests.post(url,headers=hdr, data={"filterList":[{}]})
这两个函数之间唯一的区别是sslContext。在func_NOK中,我尝试:
resp = requests.post(url,headers=hdr, data={"filterList":[{}]}, verify=False)
-它没有workresp = requests.post(url,headers=hdr, data={"filterList":[{}]}, cert=('myCA.crt.pem','myprivate.pem'))
-它没有workresp = requests.post(url,headers=hdr, data={"filterList":[{}]}, verify="concat_file.crt")
与"concat_file.crt“文件连接'myCA.crt.pem‘和'myprivate.pem'在任何情况下,我都有一个SSL错误。例如,在我的最后一个示例中,错误消息是:
requests.exceptions.ConnectionError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl.c:1131)
我只是尝试使用带有请求的SSLContext。
发布于 2022-02-08 22:18:05
我用requests.post(url,headers=hdr,json={“filterList”:{},cert='myprivate.pem')来解决这个问题。
发布于 2022-02-07 17:06:05
ssl.create_default_context(ssl.Purpose.CLIENT_AUTH,cafile='myCA.crt.pem') ctx.load_cert_chain(certfile='myprivate.pem')
load_cert_chain
加载证书和私钥作为客户端证书--这将是带有requests
的cert
参数。cafile
描述了它应该使用的CA来验证服务器证书--这将是请求的verify
参数。综合起来,这将导致:
requests.post(..., cert='myprivate.pem', verify='myCA.crt.pem')
发布于 2022-02-07 20:26:41
我找到了我的cacert.pem :cacert.pem
我连接了文件: myCA.crt.pem >> cacert.pem myprivate.pem>> cacert.pem
然后我使用verify='/home//pyEnv/myEnv/lib/python3.8/site-packages/certifi/cacert.pem')指定了路径:requests.post(.,
而且我不再有ssl错误了。但是,我检索的是html msg,而不是json。可能是我发送到端点的参数出现了问题。
https://stackoverflow.com/questions/71021586
复制相似问题