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