Как стать автором
Обновить

Комментарии 35

После подробностей про AES ожидал увидеть мнения по скорости RSA 2048/4096; EC и общей готовности к переходу на него.


PS: маленькая просьба к таким: делать в тексте кликабельные ссылки со слайда-картинки, чтобы не искать слайды в презентации.

Отличная статья!

Не упомянуты tickets и кэширование сессий.
+1, пожалуй.

Одного упоминания мало.


  1. Тикеты нужно вовремя и правильно обновлять, сохраняя несколько предыдущих ключей для старых соединений.
  2. А вот от сохранения сессий возможно уже пора избавляться, особенно в кластерной среде.
Генератор конфигов Mozilla выключает тикеты но оставляет кэширование.

Это специально для копипастеров, т.к. для использования тикетов нужно выполнять пункт №1 из моего комментария и безопасно шарить по всем серверам в кластере. Загляните на официальный wiki. Если кто-то в состоянии утащить ключи тикетов, то тут проблема другого порядка.


С точки зрения производительности и наличия готовых решений иметь общий кеш сессий в кластере ещё проблемнее и опаснее.


Вдобавок, есть возможность латентно переполнять кеш как часть атаки.

Что если иметь кэш сессий, но не раскидывать его по узлам кластера, а оставлять локально, и использовать stick tables чтобы балансер направлял одного клиента на один и тот же web-сервер?

Привязывать наверно по IP предлагаете, т.е. на каждом сервере будет конфликт по session ID.
Если я ничего не упустил, то nginx генерирует предсказуемые SID'ы. Это неизбежный конфликт при смене IP или переключении сервера во время обслуживания..


Вероятно, именно поэтому настройки nginx по умолчанию:


ssl_session_cache none;
ssl_session_tickets on;

По крайней мере, в своё время я отказался от кеша сессий, из-за жёсткого сбоя клиентских API запросов при динамической балансировке нагрузки. Во-вторых, кривые API клиенты достаточно быстро переполняли кеш.

А что скажете про вот это?

http://blog.haproxy.com/2011/07/04/maintain-affinity-based-on-ssl-session-id/

По сути та же проблема переполнения таблицы. Фронтовых HAProxy должно быть минимум два для высокой доступности с дополнительной сложностью синхронизации таблиц через peers. Любое такое решение имеет свои пределы масштабирования + более подвержена ошибкам конфигурации.


А по поводу SID'ов всё же немного погорячился. Хоть сама генерация вроде бы и предсказуема, но где-то должны быть переменные значения на входе. Сейчас не удаётся воспроизвести коллизию из-за которой отваливались клиенты. ChangeLog говорит об исправленных CVE с сессиями и несколько лет назад код модуля был совсем другой.

Как вы рекомендуете реализовывать session resumption в распределённой среде?

Тикеты дают тот же результат. Разница в том, что:


С tickets — сессия хранится только на клиенте и по сути используется один активный ключ шифрования для всех клиентов. Подобрал его — раскрыл все сессии.


С session ID — сессия хранится и на клиенте, и на сервере, более безопасны, но хуже масштабируются. Есть очевидные атаки в виде мелких пакостей с переполнением кеша и полного хендшейка для всех клиентов.


По мне, для большинства публичных сайтов тикеты более чем подходят. Для банков и подобных кейсов, конечно, более безопасными будут Session ID.

А в чем масштабирование TLS заключалось-то?

Статья — хорошая, как обзор, и для образования.
Имелось в виду горизонтальное масштабирование :-)
В каком смысле? Много фронтэндов ставим?

(шепотом) Смайлики здесь не в фаворе!
> В 2014 году было обнаружено целых две критических уязвимости в самой популярной, на тот момент, библиотеке SSL. Кто-то даже попытался перейти по этому поводу на другую популярную альтернативу — TLS, которая оказалась даже ещё хуже

OpenSSL (если включать сюда его форки) и сейчас является самой популярной библиотекой TLS/SSL.
А по поводу TLS вообще не понял вашей мысли. В 2014-ом все уже давно использовали TLS 1.0, кто и куда хотел перейти? По поводу того, что TLS оказался хуже — не знаю, почему вы так решили, SSL 3.0 был ещё более дырявым. Подобные ошибки в тексте сильно портят впечатление от статьи.

Вот честно, статей по поводу TLS сейчас вагон и маленькая тележка, начиная от теоретического ликбеза и заканчивая конкретными инструкциями. Для кого писалась конкретно эта статья?
> По поводу того, что TLS оказался хуже — не знаю, почему
> вы так решили, SSL 3.0 был ещё более дырявым.

Да, это опечатка, исправим. В оригинале сравнивались не протоколы SSL и TLS, а библиотеки, соответственно, OpenSSL и GNUTLS.

Чудо-статья и хорошее упоминание про закрытые ключи для Роскомнадзора. Как они законы принимают?

Роскомнадзор не требует ни от кого закрытых ключей.

*пока не требует

1. Разве такое право дали Роскомнадзору, а не ФСБ?
2. Разве его раньше у ФСБ не было?
А нельзя отказаться от корневых и TLS/SSL серверов и перейти на распределенную архитектуру (mesh network) по типу Tor Relay?

Весь Тор построен на TLS. Данные между узлами передаются многократно зашифрованными.

НЛО прилетело и опубликовало эту надпись здесь
Не путайте тёплое с мягким. TLS — это «безопасность транспортного уровня» (в смысле 7-уровневой модели ОСИ), т.е. протокол шифрования поверх TCP. И конкурент этому протоколу шифрования — например, ipsec или тот же SSL.
А слово «корневые» относится к PKI (Public Key Infrastructure) — инфраструктуре [распространения] публичных ключей. В которую, собственно, и входят корневые и промежуточные центры сертификации, а также средства доверенной доставки корневых сертификатов на конечные устройства. Тут возможны, в принципе, меш- и блокчейн-подобные варианты. В первом случае сертификату должны доверять ваши «друзья» или «соседи», во-втором — больше половины «полноценных» узлов сети. Первый случай быстрее и дешевле, но что делать, если вы в тылу врага, с друзьями связи нет, а соседи за вами следят?
мы говорим про распределённую структуру со множеством балансировщиков… а третий получите бесплатно у Let’s Encrypt.

Автоматизировать получение сертификата Let’s Encrypt в большой распределённой системе довольно нетривиально. А без автоматизации с максимальным сроком действия 90 дней как-то не очень.

НЛО прилетело и опубликовало эту надпись здесь

Подскажите какую комманду встраивать? Штатные тулзы Let’s Encrypt поддерживают единственный способ верификации — положить файлик к вам на сервер и запросить его извне. Пока Вы будете его синхронизировать по всем серверам у них timeout случится. Для верификации через txt-запись есть только неофициальный скриптик, который поддерживает исключительно bind.

НЛО прилетело и опубликовало эту надпись здесь

Распределённые системы на то и распределённые, чтобы не иметь одной точки отказа в виде единственного балансера. В больших системах у одного доменного имени бывает сотни ip и на каждом в начале стоит балансер, который работает на уровне tcp, а не http (т.е. не имеет возможности анализировать url).

НЛО прилетело и опубликовало эту надпись здесь

Вот-вот, а в статье Let’s Encrypt рекомендуется для "распределённых структур со множеством балансировщиков", хотя он совсем не богатых дядичек создавался.

НЛО прилетело и опубликовало эту надпись здесь
> Пока Вы будете его синхронизировать по всем серверам у них timeout случится.

Хэш в файлике имеет срок жизни. Вы можете запросить проверку не сразу после его генерации. За 10 минут-то успеете файл синхронизировать?
Что нетривиального в раздаче файла на несколько машин?
Зарегистрируйтесь на Хабре, чтобы оставить комментарий