我试图找出如何指定一个 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","Autrization":"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","Autrization":"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)
-它不起作用
resp = requests.post(url,headers=hdr, data={"filterList":[{}]}, cert=('myCA.crt.pem','myprivate.pem'))
-它不起作用
resp = requests.post(url,headers=hdr, data={"filterList":[{}]}, verify="concat_file.crt")
与“concat_file.crt”文件连接“myCA.crt.pem”和“myprivate.pem”
在任何情况下,我都有一个 SSL 错误。例如,在我的最后一个例子中,错误 msg 是:
requests.exceptions.ConnectionError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl.c:1131)
我只是想使用一个 SSLContext 请求。
ctx = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH,cafile='myCA.crt.pem')
ctx.load_cert_chain(certfile='myprivate.pem')
load_cert_chain
加载证书和私钥以用作客户端证书-这将是cert
参数与requests
。cafile
描述了它应用于验证服务器证书的 CA-这将是请求的verify
参数。这将导致:
requests.post(..., cert='myprivate.pem', verify='myCA.crt.pem')
我找到我的 cacert.pem:/ me / & lt;soome_path & gt;/ pyEnv / myEnv / lib / pytn3.8 / site-packages / certifi / cacert.pem
我连接了文件:myCA.crt.pem & gt;& gt;cacert.pem myprivate.pem & gt;& gt;cacert.pem
然后我使用 verify:requests.post (...,verify = '/ me / & lt;soome_path & gt;/ pyEnv / myEnv / lib / pytn3.8 / site-packages / certifi / cacert.pem') 指定路径
和我没有 ssl 错误了。但是我检索一个 html msg 而不是 json。也许是我发送到端点的参数的问题。
我解决它使用:requests.post(URL,headers = hdr,json = {“filterList”:[{}]},cert = 'myprivate.pem')
本站系公益性非盈利分享网址,本文来自用户投稿,不代表边看边学立场,如若转载,请注明出处
评论列表(5条)