OCSP stapling in Nginx >=1.3.7
Maxim Dounin
mdounin на mdounin.ru
Вт Сен 18 17:03:31 UTC 2018
Hello!
On Tue, Sep 18, 2018 at 05:01:07PM +0300, Gena Makhomed wrote:
> On 17.09.2018 2:36, Maxim Dounin wrote:
>
> >>>>>>>>> Лучше всего - сделать так, чтобы OpenSSL научился проверять
> >>>>>>>>> OCSP-ответы не полной цепочкой сертификатов вплоть до доверенного
> >>>>>>>>> root'а, а ровно так, как и должно быть по стандарту - с помощью
> >>>>>>>>> одного только сертификата issuer'а. Тогда проблема исчезнет.
>
> Над OCSP в OpenSSL работал Rob Stradling из Comodo, может быть имеет
> смысл к нему обратиться с просьбой исправить эту проблему в OpenSSL?
Rob точно учавствовал в обсуждениях, где проблема излагалась, и
даже, помнится, пытался что-то править.
> >> Кстати, пользователи жалуются, что есть 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.
Проблема в том, что нельзя просто так взять механизм оптимизации и
сделать из него механизм контроля, это две разные задачи, которые
надо решать по-разному.
> Кстати, тест на ssllabs.com показывает OCSP Must-Staple зеленым цветом.
> Ivan Ristic как бы намекает, что это полезный флаг и его стоит включить.
>
> > Любители 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-ответом для сертификата - или браузер или сам веб-сервер.
>
> Разумеется, не отправлять ответ клиенту без OCSP Stapling'а имеет смысл
> только для тех сертификатов, у которых установлен флаг OCSP Must-Staple.
Проблема для начала в том, что в OpenSSL нет возможности подождать
получения OCSP-ответа, не блокируя рабочий процесс nginx'а.
> P.S.
>
> Кстати, если посмотреть через https://www.ssllabs.com/ssltest/
> на сайты nginx.org и nginx.com, то видно, что с nginx.org все
> нормально, а вот nginx.com настроен не совсем оптимально.
>
> Наверное самый простой вариант корректной настройки сервера:
>
> # OpenSSL, ssl_ciphers и nginx: прокачиваем на 100%
> # https://habrahabr.ru/post/325230/
>
> ssl_prefer_server_ciphers on;
> ssl_protocols TLSv1.3 TLSv1.2 TLSv1.1 TLSv1;
> ssl_ciphers EECDH:+AES256:-3DES:RSA+AES:RSA+3DES:!NULL:!RC4;
>
> Может быть имеет смысл сделать эти значения
> значениями по-умолчанию в nginx?
Я не считаю использование "ssl_prefer_server_ciphers on"
правильным приблизительно нигде, кроме ситуаций, когда автор
конфигурации чётко понимает, чего он хочет добиться, и регулярно
занимается анализом и пересмотром списка используемых шифров.
И даже в этом случае - его использование подчас выходит боком, как
например с выбором AES vs. ChaCha20:
https://trac.nginx.org/nginx/ticket/1445
Во всех остальных случаях - значение "ssl_prefer_server_ciphers
off;", используемое по умолчанию, является лучшим выбором, так как
позволяет клиенту самому выбрать, какой шифр для него лучше.
Текущие значения по умолчанию - "ssl_prefer_server_ciphers off;" и
"ssl_ciphers HIGH:!aNULL:!MD5;" - позволяют получить наилучшую
работу SSL с минимальными усилиями.
Что до "не совсем оптимально", то рекомендую внимательно
посмотреть, на что именно жалуется ssllabs в данном случае. Он
жалуется на то, что на практике не будет Forward Secrecy со
следующими браузерами:
IE 7 / Vista
IE 10 / Win Phone 8.0
IE 11 / Win Phone 8.1
То есть речь идёт про старые версии IE на неподдерживаемых
операционных системах. При том, что общая доля IE сейчас ~3%.
Подозреваю, что у тех, кто всё ещё пользуется этими браузерами -
если такие люди ещё действительно остались - есть проблемы
серьёзнее, чем отсутствие Forward Secrecy.
--
Maxim Dounin
http://mdounin.ru/
Подробная информация о списке рассылки nginx-ru