簡體   English   中英

Python 請求不查看 /etc/ssl/certs 以獲取自簽名證書

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM