0

Request で SSLContext を指定する方法を理解しようとしています。

理論的には同じことを行うべき2つの関数がありますが、リクエストを含む関数は機能しません。

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":[{}]})

2 つの関数の唯一の違いは、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 を使用しようとしています。

4

3 に答える 3