[英]Python requests not looking into /etc/ssl/certs for self-signed certificates
我正在嘗試將證書添加到 Dockerfile 中,這是 Python 請求 package 所需的:
FROM python:3.9-slim-buster
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1
ENV PYTHONPATH="$PYTHONPATH:/app"
WORKDIR /app
COPY ./app .
COPY ./certs/*.crt /usr/local/share/ca-certificates/
RUN update-ca-certificates
RUN pip3 install requests
CMD ["python3", "main.py"]
使用上面的 Dockerfile,我得到以下錯誤:
[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain
根據我的測試,這是因為requests
正在使用certifi
並且只查看/usr/local/lib/python3.9/site-packages/certifi/cacert.pem
內部。 如果我在cacert.pem
中添加我的證書,一切都會按預期工作並且錯誤消失了。
處理這個問題的pythonic方法是什么? 理想情況下,我寧願將證書插入目錄,而不是修改文件。 有沒有辦法“強制” Python requests
在/etc/ssl/certs
中查找證書以及cacert.pem
文件? 如果我列出/etc/ssl/certs
目錄內容,它包含 my.pem 證書。
運行apt-get update
不會更新ca-certificates
,我已經在使用最新版本。 當我執行update-ca-certificates
時,會檢測到新證書:
STEP 10/11: RUN update-ca-certificates
Updating certificates in /etc/ssl/certs...
2 added, 0 removed; done.
謝謝您的幫助。
我發現唯一合理的解決方案是:
from requests import post
from requests.exceptions import HTTPError, RequestException, SSLError
try:
result = post(url=url, data=dumps(data), headers=headers, verify='/etc/ssl/certs')
except (HTTPError, RequestException, SSLError) as e:
raise
設置verify=/etc/ssl/certs
將看到自簽名證書。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.