Фрагмент из nginx conf:
server {
ssl on;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
...
Есть ли способ настроить это, чтобы принудительно использовать TLSv1.2, и, если он не поддерживается клиентом, вернуться к TLSv1.1 / TLSv1?
Или TLSv1.2 уже используется по умолчанию?
Будет использоваться самая высокая версия протокола, поддерживаемая обоими сторонами соединения. Итак, по умолчанию будет использоваться TLS v1.2.
Причина, по которой вам нужно отключить чрезвычайно небезопасные протоколы, такие как SSLv2 / 3, - это атаки на более раннюю версию; посредник может изменить согласование SSL-соединения, чтобы принудительно использовать менее безопасный протокол. Вы ничего не можете с этим поделать, кроме как не поддерживать старые протоколы, потому что вам никогда не говорят, что другой конец поддерживает лучший (потому что злонамеренный посредник удалил эту информацию).
по умолчанию, в вашем правиле сервера указано, что протоколы ssl настроены на поддержку тех из них:
мы не хотим использовать SSLv2 (небезопасный) или SSLv3 (уязвимый)
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
Если у вас нет особых причин полагать иначе, обычно системы, поддерживающие TLS, будут поддерживать TSLv1.2.
Поэтому, если это вообще возможно, я бы вместо этого использовал:
ssl_protocols TLSv1.2
Если это невозможно, я бы использовал:
ssl_protocols TLSv1.2 TLSv1.1
TLSv1
также можно использовать во втором случае (вместо более конкретных версий), но таким образом вы обеспечиваете порядок предпочтения. Я вроде как предполагаю, что TLSv1 обычно предпочитает 1.2, а не 1.1, но явное указание на это не повредит.
Видеть Генератор конфигурации Mozilla TLS для набора рекомендаций по более общей настройке TLS.