首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python和SSLContext

Python和SSLContext
EN

Stack Overflow用户
提问于 2022-02-07 16:01:13
回答 3查看 3.5K关注 0票数 1

我正在试图找出如何使用请求指定SSLContext。

理论上,我有两个函数应该做同样的工作,但是有请求的函数不能工作。

代码语言:javascript
运行
复制
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'))
代码语言:javascript
运行
复制
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中,我尝试:

  1. resp = requests.post(url,headers=hdr, data={"filterList":[{}]}, verify=False) -它没有work
  2. resp = requests.post(url,headers=hdr, data={"filterList":[{}]}, cert=('myCA.crt.pem','myprivate.pem')) -它没有work
  3. resp = requests.post(url,headers=hdr, data={"filterList":[{}]}, verify="concat_file.crt")与"concat_file.crt“文件连接'myCA.crt.pem‘和'myprivate.pem'

在任何情况下,我都有一个SSL错误。例如,在我的最后一个示例中,错误消息是:

代码语言:javascript
运行
复制
requests.exceptions.ConnectionError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl.c:1131)

我只是尝试使用带有请求的SSLContext。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-02-08 22:18:05

我用requests.post(url,headers=hdr,json={“filterList”:{},cert='myprivate.pem')来解决这个问题。

票数 0
EN

Stack Overflow用户

发布于 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加载证书和私钥作为客户端证书--这将是带有requestscert参数。cafile描述了它应该使用的CA来验证服务器证书--这将是请求的verify参数。综合起来,这将导致:

代码语言:javascript
运行
复制
requests.post(..., cert='myprivate.pem', verify='myCA.crt.pem')
票数 0
EN

Stack Overflow用户

发布于 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。可能是我发送到端点的参数出现了问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71021586

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档