带有请求的自签名证书不能处理请求\u CA\u BUNDLE环境变量

2024-04-25 09:01:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个脚本,它使用请求来调用API端点,但是在我所在的位置,所有通信都需要使用自签名证书(MITM)。你知道吗

我从.bash_profile中适当地加载环境变量:

.bash\u profile包含以下行:

export REQUESTS_CA_BUNDLE='/exact/location/of/certs/myrootca.pem'

然后激活virtualenvironment并运行. ~/.bash_profile,加载环境变量。你知道吗

但是,在本地运行此脚本时,失败并显示以下消息:

Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl.c:1076)'))

出错的部分,如下所示:

    BASE_URL = (
    "https://theapiendpoint.org/the/endpoint/user?limit=10"
    )
    key = os.environ.get("OAUTH_KEY")
    secret = os.environ.get("OAUTH_SECRET")
    auth = OAuth1(key, secret)
    url = BASE_URL
    # THIS IS THE LINE THAT ERRORS
    r = requests.get(url, auth=auth)

在生产服务器上,这可以正常工作,因为它为REQUESTS_CA_BUNDLE中列出的自签名证书选择环境变量,并且不会抛出错误。你知道吗

如果我运行python -c "import requests; print(requests.certs.where())",它会显示cacert.pem的以下位置:

/my/repo/venv/lib/python3.7/site-packages/certifi/cacert.pem

我尝试过将我的自签名信息添加到.pem中,但也没有成功。你知道吗

有没有想过我还可以尝试什么,这样这个脚本就可以在我拥有的任何环境中运行,而不必在生产和本地开发之间进行代码更改?你知道吗


Tags: 脚本bashauthbaseget环境变量certificateprofile