Gunicorn / Flask отклоняет идентичный сертификат SSL, который отлично работает с Apache.

Что заставило бы сервер Gunicorn, на котором запущено приложение Flask, сообщать об ошибке "sslv3 alert certificate unknown" в браузере, когда сервер Apache, на котором запущено приложение WSGI, использует точно такой же сертификат на на той же машине, не сообщает о проблемах?

Служба Gunicorn размещается в домене https://mysub.example.com:1234 , а служба Apache размещается на стандартном порту 80 по адресу https://mysub.example.com .

Обе службы размещаются на одном физическом сервере и загружают подстановочный SSL-сертификат, расположенный в / etc / ssl / certs .

Журналы из Gunicorn / Flask не обеспечивают особой обратной связи и просто показывают:

[2021-06-23 12:55:34 -0500] [2320785] [DEBUG] Error processing SSL request.
[2021-06-23 12:55:34 -0500] [2320785] [DEBUG] Invalid request from ip=123.45.678.90: [SSL: SSLV3_ALERT_CERTIFICATE_UNKNOWN] sslv3 alert certificate unknown (_ssl.c:2633)

Сервер Gunicorn запускается через Supervisor с пользователем www-data командой:

/usr/local/alphabuyer/.env/bin/gunicorn --certfile=/etc/ssl/certs/example.com.crt --keyfile=/etc/ssl/certs/example.com.key --bind 0.0.0.0:1234 server:app

Между тем, настройки SSL для конфигурации Apache:

SSLEngine On
SSLCertificateFile /etc/ssl/certs/example.com.crt
SSLCertificateKeyFile /etc/ssl/certs/example.com.key
SSLCACertificateFile /etc/ssl/certs/example.com.intermediate.crt
SSLProtocol all
SSLCipherSuite HIGH:MEDIUM

Я проверил разрешения в / etc / ssl / certs , и они кажутся правильными. Все принадлежит пользователю www-data изменено на 600.

Я не вижу причин, по которым сертификат будет правильно обслуживаться Apache, а не Gunicorn. Сообщение об ошибке предполагает, что это не обязательно что-то, что обслуживает Gunicorn, а ошибка или какая-то поддерживаемая функция с запросом, который делает браузер.Что мне здесь не хватает?

1
задан 23 June 2021 в 21:17
2 ответа

Моя проблема была, по сути, дубликатом этого вопроса , а основная причина заключалась в том, что мои клиентские сертификаты устарели.

Этот ответ решил мою проблему, обновив мой локальный пакет ca-сертификатов .

0
ответ дан 28 July 2021 в 13:22

Gunicorn (и практически все остальное, что делает TLS кроме Apache) ожидает, что ваш сертификат TLS будет скомпонован с промежуточными сертификатами в одном файле.

Создайте конкатенированный файл:

cat /etc/ssl/certs/example.com.crt /etc/ssl/certs/example.com.intermediate.crt > /etc/ssl/certs/example.com.chain.crt

Теперь используйте его в командной строке.

.... --certfile=/etc/ssl/certs/example.com.chain.crt ....
0
ответ дан 28 July 2021 в 13:22

Теги

Похожие вопросы