Ошибка gunicorn gevent CERTIFICATE_VERIFY_FAILED
У меня есть веб-сайт Django, запущенный в контейнере Docker (Debian), который я развертываю с помощью следующей команды:
gunicorn core.wsgi:application --bind 0.0.0.0:8000 --workers 33 --worker-class gevent --timeout 1200
Я создал простое представление с исходящим запросом:
def my_view(request):
import requests
requests.get('https://website.domain.com', verify='/etc/ssl/certs/mycert.cer')
return HttpResponse('Success')
Который выдает ошибку:
requests.exceptions.SSLError: HTTPSConnectionPool(host='website.domain.com', port=443):
Max retries exceeded with url: / (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED]
certificate verify failed: unable to get local issuer certificate (_ssl.c:1000)')))
Что может быть причиной такого поведения? Что особенного в том, как gevent worker обрабатывает SSL-сертификаты?
Что я выяснил на данный момент:
- Скрипт работает нормально, когда я использую --worker-class sync или развертываю с помощью python manage.py runserver
- Скрипт отлично работает при выполнении через консоль python или с помощью python manage.py оболочка (из запущенного контейнера docker)
- Сертификат указан правильно (в противном случае в описанных выше случаях он не работал)
- Сброс настроек REQUESTS_CA_BUNDLE, CURL_CA_BUNDLE, SSL_CERT_FILE или установка их в текущее местоположение моего файла сертификата не помогает
- PYTHONHTTPSVERIFY=0, похоже, не имеет никакого эффекта
- verify=False и verify=True не имеют никакого эффекта
- Добавление monkey.patch_all() в скрипте не имеет эффекта
- Добавление gunicorn.conf.py с помощью monkey.patch_all() в этом случае не имеет никакого эффекта
- Сертификат определенно используется. Потому что, если я задаю параметру verify неверный путь, он выдает соответствующую ошибку
- обновление-сертификаты центра сертификации не действуют
Пакеты Python (некоторые из них):
Python 3.11.7
amqp 5.3.1
asgiref 3.8.1
bcrypt 4.3.0
бильярд 4.2.1
сертификат 2025.6.15
cffi 1.17.1
криптография 45.0.5
дистрибутив 0.3.8
Django 5.2.4
filelock 3.15.4
событие 25.5.1
зеленый список 3.2.3
gssapi 1.9.0
gunicorn 23.0.0
система кондиционирования воздуха 2.3.0
krb5 0.5.1
пункт 25.1.1
pip_system_certs 5.2
psutil 7.0.0
pykerberos 1.2.4
запросы 2.32.4
запросы-kerberos 0.15.0
Полный текст ошибки: