Передача информации протокола SSL на сервер через заголовок HTTP

13

После того, как недавно была обнаружена уязвимость Poodle, наша команда решила перейти от SSLv3. Но до полного удаления, они хотят , чтобы предупредить о ежедневных пользователей , что их использование браузера устаревшее SSLv3. Итак, мы пришли к идее

  • Определите протокол (SSLv3, TLS1 и т. Д.) Из внешней разгрузки SSL (мы используем nginx)
  • Передайте эту информацию (протокол SSL) через HTTP-заголовок серверу Apache.

Затем наш внутренний код обработает этот заголовок и выдаст предупреждение, если клиент использует SSLv3 .

Я знаю, что nginx имеет особенность proxy_set_header. Так что это было бы просто, как

proxy_set_header X-HTTPS-Protocol $something;

Теперь проблема в том, что nginx, очевидно, знает протокол, используемый клиентом, но как я могу передать эту информацию бэкэнду через HTTP-заголовок?

Благодарность


Как указывает аналогичный поток пользователей перенаправления Apache, если они используют SSLv3 , эта идея может стать очень-очень плохой идеей.

Причина в том, что рукопожатие TLS происходит до того, как трафик HTTP отправляется через туннель TLS. К тому времени, когда наш сервер обнаружит протокол SSL, клиент, возможно, уже отправил личные данные в своем первом запросе. Для постоянного и долгосрочного решения мы должны рассмотреть возможность отключения SSLv3.

tpml7
источник

Ответы:

14

Nginx использует много переменных, которые можно использовать в конфигурации. На этой странице представлен полный список переменных. Переменная, которая содержит протокол в запросе HTTPS, имеет вид ssl_protocol. Образец цитирования:

$ssl_protocol

возвращает протокол установленного SSL-соединения;

Так что ваша proxy_set_headerконфигурация будет

proxy_set_header X-HTTPS-Protocol $ssl_protocol;

Еще одна ссылка: здесь

masegaloeh
источник
Отсутствует точка с запятой в конце $ ssl_protocol (я не могу изменить его, так как serverf * l требует изменения 6 символов).
danger89
@ danger89 сделал это
sanmai