Przekazywanie informacji o protokole SSL do zaplecza przez nagłówek HTTP

13

Po niedawnym ujawnieniu podatności Poodle nasz zespół zdecydował się na przejście z SSLv3. Ale przed całkowitym usunięciu, chcą ostrzec tych codziennych użytkowników , że ich użycie przeglądarka nieaktualnych SSLv3. Więc wpadliśmy na pomysł

  • Wykryj protokół (SSLv3, TLS1 itp.) Z front-offloadingu SSL (używamy nginx)
  • Przekaż te informacje (protokół SSL) przez nagłówek HTTP do backendu Apache.

Następnie nasz kod zaplecza przetworzy ten nagłówek i wyświetli ostrzeżenie, jeśli klient użyje protokołu SSLv3 .

Wiem, że nginx ma funkcję proxy_set_header. Więc ten byłby prosty jak

proxy_set_header X-HTTPS-Protocol $something;

Problem polega na tym: oczywiście nginx zna protokół używany przez klienta, ale jak mogę przekazać te informacje do backendu za pomocą nagłówka HTTP?

Dzięki


Jak wskazał podobny wątek użytkownik przekierowujący Apache, jeśli używa SSLv3 , ten pomysł może stać się bardzo złym pomysłem.

Przyczyną jest uzgadnianie TLS, zanim ruch HTTP zostanie wysłany przez tunel TLS. Zanim nasz backend wykryje protokół SSL, klient mógł wysłać prywatne dane w swoim pierwszym żądaniu. W przypadku trwałego i długoterminowego rozwiązania należy rozważyć wyłączenie protokołu SSLv3.

tpml7
źródło

Odpowiedzi:

14

Nginx używa wielu zmiennych, które mogą być użyte w config. Ta strona zawiera pełną listę zmiennych. Zmienna przechowująca protokół w żądaniu HTTPS to ssl_protocol. Cytat:

$ssl_protocol

zwraca protokół ustanowionego połączenia SSL;

Więc twoja proxy_set_headerkonfiguracja byłaby

proxy_set_header X-HTTPS-Protocol $ssl_protocol;

Kolejne odniesienie: tutaj

masegaloeh
źródło
Brak średnika na końcu $ ssl_protocol (nie mogę go zmienić, ponieważ serverf * l wymaga zmiany 6 znaków).
niebezpieczne89
@ niebezpieczne89 zrobiło to
sanmai