ssl_prefer_server_ciphers

Gena Makhomed gmm at csdoc.com
Mon Sep 9 11:31:11 UTC 2013


On 09.09.2013 13:06, Anton Yuzhaninov wrote:

>> потому что при ssl_prefer_server_ciphers off;
>> nginx подвержен влиянию BEAST-атаки CVE-2011-3389.
>
> Без очень тщательного выбора того что и каком порядке указывать в
> ssl_ciphers это делать смысла мало.
>
> А что писать в ssl_ciphers вопрос не очень простой.
>
> На первом месте логично поставить AES-GCM, но он пока не поддерживается
> большинством браузеров. Да и на сервере для его нужен openssl 1.0.1 а во
> многих дистрибутивах используются более старые версии.

ясно. а нельзя сделать так, чтобы если openssl версии 1.0.1,
то по-умолчанию в ssl_ciphers на первом месте стоял AES-GCM,
а если openssl более ранней версии, тогда лучшее из возможного:

ssl_ciphers RC4:HIGH:!aNULL:!MD5:!kEDH;

а если директива ssl_ciphers будет игнорировать AES-GCM,
если он есть в строке, но openssl его не поддерживает -
то и вообще одной дефолтовой строкой тогда можно обойтись.

плюс варнинг в логах, тогда пользователь подумает о том,
что может быть ему имеет смысл обновить openssl для nginx.

и тогда nginx будет "secure by default" настолько,
насколько это возможно и это будет гораздо лучше,
чем теперешний более уязвимый дефолт:

ssl_ciphers HIGH:!aNULL:!MD5;

> Из того, что поддерживается широко:
>
> AES-CBC - подвержен BEAST
> RC4 в теории тоже уязвим: http://www.isg.rhul.ac.uk/tls/ (хотя сильно
> опасаться этого пока не стоит).

в интернетах пишут про RC4, что "Пока что в реальных условиях атака 
трудно воспроизводима, но может проводиться крупными организациями"
так что на сегодня RC4 является более предпочтительным, чем AES-CBC

AES-CBC входит в группу HIGH, так что поменяв

ssl_ciphers HIGH:!aNULL:!MD5;

на

ssl_ciphers RC4:HIGH:!aNULL:!MD5:!kEDH;

мы просто скажем клиенту, что cipher RC4 является более предпочтительным
и если какой-то браузер умеет AES-CBC и не умеет RC4 - он будет работать

насколько я понимаю логику работы директивы ssl_prefer_server_ciphers
при ssl_prefer_server_ciphers on: будет выбран наилучший cipher из тех, 
что предпочитает сервер и поддерживает клиент. т.е. будет выбран:
(1)AES-GCM или (2)RC4 или любой другой из (3)HIGH (AES-CBC и т.п.)

> И еще возможно бывают клиенты со старыми браузерами, которые не
> поддерживают ни AES и RC4 (таких наверно мало).

может быть имеет смысл в документации к nginx написать рекомендацию,
чтобы пользователи после настройки ssl проверили свой сайт на предмет 
уязвимостей на сайте https://www.ssllabs.com/ssltest/ ?

и почитали SSL/TLS Deployment Best Practices https://www.ssllabs.com/

подозреваю, что многие пользователи считают, что nginx имеет дефолтовые
значения параметров такие, что он будет "secure by default" и они даже
не догадываются про все эти уязвимости и нюансы в настройке ssl в nginx.

-- 
Best regards,
  Gena



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