Передача информации протокола SSL в бэкэнд через заголовок HTTP
После того, как недавно была обнаружена уязвимость 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.
1 ответ
Nginx использует много переменных, которые можно использовать в конфигурации. На этой странице представлен полный список переменных. Переменная, которая содержит протокол в запросе HTTPS: ssl_protocol
, Образец цитирования:
$ssl_protocol
возвращает протокол установленного SSL-соединения;
Так что ваши proxy_set_header
Конфигурация будет
proxy_set_header X-HTTPS-Protocol $ssl_protocol;
Еще одна ссылка: здесь