Обнаружение / проверка версии TLS запроса - PullRequest
2 голосов
/ 14 июля 2020

Мы получили следующее письмо от Heroku. У нас есть серверная часть django в heroku с большим количеством запросов от браузеров и других систем.

Как говорит Heroku, мы думаем, что у нас не будет никаких проблем с браузерами, потому что даже старые браузеры совместимы с TLS 1.2: https://caniuse.com/tls1-2

Но мы не знаем, подключаются ли другие системы к нашей системе с TLS 1.0 или TLS 1.1.

Можем ли мы обнаружить это по нашему коду ? Что-то вроде этого?

if request.getProtocolTLS() in ["TLS1.0", "TLS1.1"]:
    send_admin_mail('Alert old protocol of TLS', request.user, request.get_full_path())

UPDATE с реальными данными нашего приложения:

  1. Cloud: Heroku

  2. Framework: Django 1.11.11

  3. Python версия: 3.6

  4. HTTP-сервер WSGI: gunicorn

  5. Procfile:

    web: python manage.py collectstati c --noinput; gunicorn joinupback.wsgi --log-file - --max-requests 6700 --max-requests-jitter 20

Уважаемый клиент Heroku,

В Для Salesforce наша первоочередная задача - предоставить вам надежную платформу Heroku, и сегодня мы начинаем миграцию с более старых, менее безопасных версий TLS с планом полной блокировки TLS v1.0 / v1.1 в следующем году после 31 июля 2021 года. Хотя это ограничение обычно не является проблемой для клиентов веб-браузера, некоторые старые клиенты, не являющиеся браузерами, могут быть затронуты. Это уведомление дает вам полный год на внесение любых изменений, необходимых для обеспечения того, чтобы все клиенты использовали TLS v1.2 или выше (v1.2 +).

Heroku в настоящее время поддерживает TLS v1.0 / v1.1, а также новейший, более безопасный протокол TLS v1.2 + для всех приложений. В апреле 2016 года Совет PCI выпустил версию 3.1 своего стандарта безопасности данных (DSS). Среди множества изменений и рекомендаций было то, что SSL и TLS v1.0 больше использовать нельзя. Сегодняшняя рекомендация - использовать TLS v1.2 + не только для соответствия PCI, но и в качестве общей передовой практики для шифрования данных при передаче на inte rnet.

Сегодня Heroku начинает реализацию этих рекомендаций для перевести все приложения на TLS v1.2 +, чтобы в следующем году можно было завершить работу TLS v1.0 / v1.1.

Что мне нужно делать? Вам ничего не нужно делать, чтобы это изменение повлияло на вас. Все произойдет автоматически, без каких-либо действий с вашей стороны. Однако, если есть клиенты, которые обращаются к вашему приложению с помощью TLS v1.0 / 1.1, их нужно будет обновить до 31 июля 2021 года.

Что мне нужно знать? Недавно мы изменили шифры, используемые во всех новых приложениях Heroku, развернутых в частных пространствах, для поддержки только TLS v1.2 +. Существующие приложения, уже работающие в частном пространстве, остаются без изменений с использованием предыдущего набора шифров по умолчанию.

Позже в этом году мы внесем аналогичные изменения в шифры по умолчанию для всех новых приложений Heroku.

Если вы запускаете свои приложения в частном пространстве, вы можете sh изменить их набор шифров на TLS v1.2 +, только чтобы они не пострадали, когда мы заблокируем трафик TLS v1.0 / v1.1 c . Подробности о том, как это сделать, можно найти в статье Центра разработки маршрутизации в частных пространствах (раздел «Безопасность SSL»).

Когда мы меняем набор шифров по умолчанию для приложений Common Runtime (т. Е. Приложений, не находящихся в частных пространствах), мы также предоставим вам инструкции по изменению набора шифров для этих существующих приложений.

Начиная с 1 июня 2021 г., мы начнем перенос всех приложений на новые наборы шифров и заблокируем TLS v1.0 / v1.1, завершение миграции к 31 июля 2021 года.

После 31 июля 2021 года клиенты, которые получают доступ к приложениям Heroku с использованием TLS v1.0 / v1.0, будут заблокированы. Важно, чтобы вы предприняли необходимые шаги до этого, чтобы ваши приложения оставались доступными для всех ваших клиентов.

С уважением, Heroku

1 Ответ

1 голос
/ 22 июля 2020

Поскольку вы не запускаете Gunicorn в режиме https, мы можем исключить reverse proxy <-> gunicorn. Итак - у вас нет проблем, у вашего обратного прокси есть, что означает, что Heroku делает.

Если вы запускаете gunicorn с ssl , вы можете выбрать версию ssl used.

Тем не менее, письмо информирует вас о том, что устройства людей, посещающих ваш сайт, должны обновиться, если они действительно старые. Вы не сможете это обнаружить, потому что спецификация WSGI не требует, чтобы протоколы SSL передавались от обратного прокси к серверу WSGI. Однако это возможно, но я не знаю, какой контроль есть у Heroku.

Например, используя uWSGI , модуль nginx uwsgi и модуль ssl, это можно сделать:

  • nginx ssl-модуль определяет $ ssl_protocol
  • uwsgi_param директива определяет переменные, которые будут переданы в WSGI среда
  • Django прочитает их через django.core.handlers.wsgi.WsgiRequest и сделает их доступными для request.META.
...