OCSP stapling in Nginx >=1.3.7

Gena Makhomed gmm на csdoc.com
Вт Сен 18 21:26:01 UTC 2018


On 18.09.2018 20:03, Maxim Dounin wrote:

>>>> Кстати, пользователи жалуются, что есть BUG в nginx,
>>>> связанный с сертификатами с флагом "OCSP Must Staple":
>>>> https://blog.crashed.org/nginx-stapling-busted/

>>> Потому что "Must Staple" - это попытка превратить OCSP stapling
>>> из механизма оптимизации в обязательный механизм, аналогичный
>>> короткоживущим сертификатам. Не сюрприз, что так не работает -
>>> требования совершенно разные.

>> RFC 7633 был создан сотрудником Comodo, в RFC он пишет,
>> что цель RFC - "prevents a denial-of-service attack".
>>
>> Сейчас, если кто-то с помощью DDoS-атаки заблокирует OCSP responder
>> - клиенты не смогут отличить отозванный сертификат от действительного.
>>
>> При массовом внедрении флага OCSP Must-Staple в сертификаты
>> - делать DDoS-атаки на OCSP responder не будет иметь смысла.
>>
>> То есть цель у флага OCSP Must-Staple наверное та же самая,
>> что и у OCSP Stapling - снизить нагрузку на инфраструктуру CA.

> Цель "Must Staple", как она обсуждалась на cabforum'е - сделать
> обязательной проверку отзыва, не нагружая дополнительно
> инфраструктуру CA.
> 
> Проблема в том, что нельзя просто так взять механизм оптимизации и
> сделать из него механизм контроля, это две разные задачи, которые
> надо решать по-разному.

Если задача стоит "сделать обязательной проверку отзыва,
не нагружая дополнительно инфраструктуру CA" - как же можно
решить эту задачу другими методами, без флага Must Staple?

Ведь флаг "обязательно проверять отзыв через OCSP" создаст
очень большую нагрузку на CA - это будет хуже чем Must Staple.
Тем более, что сейчас Google Chrome OCSP вообще не использует.

Если добавить в сертификат флаг о том, как следует относиться
к ошибкам проверки отзыва сертификата - у него может быть всего
два варианта, soft fail (то же самое что и отсутствие этого флага),
и hard fail, это вариант "Must Staple" перенесенный на уровень браузера,
то есть это будет равно флагу "обязательно проверять отзыв через OCSP".

>>> Любители Must Staple общаются в траке в двух тикетах:
>>>
>>> https://trac.nginx.org/nginx/ticket/812
>>> https://trac.nginx.org/nginx/ticket/990
>>>
>>> Пока что они делают это с нулевым полезным выходом.

>> Они в основном там просят сделать возможным указывать в конфиге
>> несколько директив ssl_stapling_file для ECDSA и RSA сертификатов.
>>
>> Но есть ведь и другие способы решения этой проблемы, например,
>> чтобы nginx получал OCSP-ответ для сертификата с Must-Staple до того,
>> как он отправит свой ответ клиенту. Пользователю ведь нет разницы, кто
>> сходит за OCSP-ответом для сертификата - или браузер или сам веб-сервер.

> Проблема для начала в том, что в OpenSSL нет возможности подождать
> получения OCSP-ответа, не блокируя рабочий процесс nginx'а.

Насколько я понимаю из исходников, nginx делает запрос к OCSP
серверу самостоятельно, не блокируя рабочий процесс nginx'а.

Очень похожий функционал запроса с "ожиданием" уже реализован в nginx,
в директиве proxy_cache_lock - там ведь рабочий процесс не блокируется.

> Я не считаю использование "ssl_prefer_server_ciphers on"
> правильным приблизительно нигде, кроме ситуаций, когда автор
> конфигурации чётко понимает, чего он хочет добиться, и регулярно
> занимается анализом и пересмотром списка используемых шифров.
> 
> И даже в этом случае - его использование подчас выходит боком, как
> например с выбором AES vs. ChaCha20:
> 
> https://trac.nginx.org/nginx/ticket/1445

Теперь понял, спасибо за подробное объяснение по этому вопросу.

Кстати, в веб-сервере gws, который обслуживает сайт www.google.com
эта проблема с AES vs. ChaCha20 уже успешно решена, ssltest говорит,
что "This server prefers ChaCha20 suites with clients
that don't have AES-NI (e.g., Android devices)"

-- 
Best regards,
  Gena



Подробная информация о списке рассылки nginx-ru