Python请求和SSLContext

piztneat  于 5个月前  发布在  Python
关注(0)|答案(3)|浏览(64)

我试图弄清楚如何用请求指定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'))

个字符
这两个函数之间唯一的区别是sslContext。在func_NOK中,我尝试:

  1. resp = requests.post(url,headers=hdr, data={"filterList":[{}]}, verify=False)-它不工作
  2. resp = requests.post(url,headers=hdr, data={"filterList":[{}]}, cert=('myCA.crt.pem','myprivate.pem'))-它不工作
  3. resp = 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与请求。

vyswwuz2

vyswwuz21#

我使用以下方法解决了它:

requests.post(url,headers=hdr,json={"filterList":[{}]}, cert='myprivate.pem')

字符串

vmpqdwk3

vmpqdwk32#

ctx = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH,cafile='myCA.crt.pem')
ctx.load_cert_chain(certfile='myprivate.pem')

字符串
load_cert_chain加载证书和私钥以用作客户端证书-这将是requestscert参数。cafile描述了它应该用来验证服务器证书的CA-这将是请求的verify参数。组合起来会导致:

requests.post(..., cert='myprivate.pem', verify='myCA.crt.pem')

hyrbngr7

hyrbngr73#

我发现我的cacert.pem:/home/<soome_path>/pyEnv/myEnv/lib/python3.8/site-packages/certifici/cacert.pem
我连接了这些文件:myCA.crt.pem >> cacert.pem myprivate.pem>> cacert.pem
然后我使用verify指定路径:requests.post(...,verify ='/home/<soome_path>/pyEnv/myEnv/lib/python3.8/site-packages/certifici/cacert. pem')
我不再有ssl错误了。但是我检索到一个html msg而不是一个json。可能是我发送到端点的参数有问题。

相关问题