В nginx журнале ошибок: “Нейтрализация SSL_BYTES_TO_CIPHER_LIST:inappropriate”

Мы недавно изменили нашу конфигурацию nginx для поддержки TLSv1.2, а также многих более безопасных шифров. Начиная с изменения наши nginx журналы ошибок были заполнены следующими ошибками:

28.01.2015 23:55:57 [критика] 16898#0: *18 712 916 SSL_do_handshake () перестали работать (SSL: нейтрализация error:140A1175:SSL routines:SSL_BYTES_TO_CIPHER_LIST:inappropriate), в то время как квитирование SSL, клиент:..., сервер: 0.0.0.0:443

Наша конфигурация nginx следующие:

server {
  root   /var/www/fl/current/public;

  listen              443;
  ssl                 on;
  ssl_certificate     /etc/nginx/ssl/wildcard.pem;
  ssl_certificate_key /etc/nginx/ssl/wildcard.key;
  ssl_session_timeout 5m;
  ssl_session_cache shared:SSL:50m;
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
  ssl_prefer_server_ciphers on;

Мы получили несколько электронных писем о пользователях, не бывших способных получить доступ к сайту. Один пользователь сказал, что это - ошибка, они входят в Firefox:

Неудавшееся безопасное соединение

Ошибка произошла во время соединения с ******.com. Сервер отклонил квитирование, потому что клиент понизил до более низкой версии TLS, чем поддержки сервера. (Код ошибки: ssl_error_inappropriate_fallback_alert)

Страницу, которую Вы пытаетесь просмотреть, нельзя показать, потому что подлинность полученных данных не могла быть проверена.

Если я понимаю правильно, то предупреждение нейтрализации является предосторожностью безопасности, когда клиент использует более низкую версию TLS, чем какой оно и поддержки сервера. Эта ошибка, кажется, имеет большой смысл, учитывая, что мы теперь поддерживаем более высокую версию протокола. То, что я не понимаю, - то, почему это изменение вызвало бы проблемы для некоторых пользователей при соединении с нашим сайтом. Действительно ли это - отказ в нашей конфигурации или их браузере?

Мы теперь выигрываем на Qualys Тест Сервера SSL, таким образом, я не решаюсь возвращаться назад к нашей старой конфигурации.

6
задан 29 January 2015 в 08:03
2 ответа

Браузеры обычно выполняют квитирование SSLv23. Этим рукопожатием они объявляют лучшую версию протокола, которую они поддерживают (сегодня в основном это TLS1.2), но не ограничивают сервер этой версией. Таким образом, сервер, который имеет правильно реализованный и настроенный стек TLS, но поддерживает только TLS1.0, просто ответит TLS1.0, и соединение будет успешным с первой попытки.

Но есть некоторые плохие стеки TLS или неправильная конфигурация или некоторые плохие промежуточные ящики (балансировщик нагрузки и т. д.) на стороне серверов, которые приводят к сбою этого подтверждения SSLv23. В этом случае браузеры понижают версию протокола, используемого в рукопожатии, то есть они пытаются использовать явное рукопожатие TLS1.0, за которым следует явное рукопожатие SSL3.0 (некоторые браузеры уже отключили SSL3.0 и поэтому не пробуют это делать).

Новые браузеры будут использовать псевдошифр TLS_FALLBACK_SCSV, если они сделают такое соединение с пониженной версией. Если сервер, поддерживающий TLS_FALLBACK_SCSV, обнаруживает пониженное соединение с более низкой версией протокола, которую он поддерживает (например, при понижении уровня используется TLS1.0, но сервер поддерживает TLS1.2), он предполагает, что происходит атака, подобная POODLE, и закрывает соединение.

Но почему клиент может вообще перейти на более раннюю версию при обращении к вашему серверу?

  • У вас может быть сломанный балансировщик нагрузки спереди, который вызывает сбои при выполнении некоторых запросов.
  • Ваш сервер или какое-то устройство анти-DOS впереди может просто закрыть соединения при высокой нагрузке до завершения подтверждения SSL. В этом случае браузер примет проблему с протоколом и попытается повторить попытку с более ранней версией.
  • Любые другие проблемы, такие как нехватка памяти и т. Д., Которые могут вызвать случайное закрытие при подтверждении связи SSL.
12
ответ дан 3 December 2019 в 00:09

Для изменения 318904 был загружен связанный патч (от BBlack): некритический для клиентского рукопожатия SSL_R_VERSION_TOO_LOW

https://gerrit.wikimedia.org/r/318904

https://phabricator.wikimedia.org/T148893

0
ответ дан 3 December 2019 в 00:09

Теги

Похожие вопросы