feat(bezpieczeństwo): HTTPS + szyfrowanie łączy między warstwami (PRE-16) #21
Reference in New Issue
Block a user
Delete Branch "feat/pre16-trusted-proxy"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Aplikacyjna część PRE-16. Manifesty (Ingress, certyfikat, klucze) idą osobnym
PR-em w
deploy(#4). Pełnainstrukcja wdrożenia obu naraz:
docs/wdrozenie-pre16.md.1. Szyfrowanie łączy między warstwami — nowość
Prezentacja, logika i dane rozmawiały ze sobą jawnym tekstem wewnątrz klastra.
Token międzywarstwowy (LOG-32) mówił kto pyta, ale nie ukrywał czego dotyczy
odpowiedź — a płyną nią surowe wiersze oryginalnych baz. Kto podsłuchał ruch
w sieci (drugi pod, mirror portu, zrzut z węzła), miał je w całości.
Nowy
link_crypto— AES-256-GCM na ciele każdego żądania i odpowiedzi:prezentacji nie otwiera warstwy danych, gdzie leżą całe bazy. Z każdego klucza
HKDF wyprowadza osobne podklucze na kierunek — żądanie i odpowiedź nigdy nie
szyfrują się tym samym.
i numer ramki — więc koperty nie da się przekleić na inny endpoint, odtworzyć
po czasie ani przestawić w strumieniu.
i przepuszcza odpowiedź strumieniową kawałek po kawałku (okno postępu działa
dalej).
Błąd, który złapał dopiero podsłuch gniazda
Testy jednostkowe były zielone, a mimo to klient bez klucza wysyłał pytanie
jawnym tekstem, zanim serwer zdążył odmówić — odpowiedź była chroniona,
zapytanie już nie. Wyszło z proxy zrzucającego prawdziwe gniazdo do pliku
(
grep significator= trafienie). StądLINK_ENCRYPTION_REQUIRED: klient niewysyła niczego, a usługa nie wstaje, jeśli klucza brak. Po poprawce ten sam
podsłuch pokazuje na kablu zero trafień treści baz, w obie strony.
2. Limit żądań po adresie klienta, nie proxy
Za Ingressem
request.client.hostto pod Traefika, jednakowy dla wszystkich —limiter wrzuciłby cały ruch do jednego wiadra i pierwsza osoba, która go wyklika,
odcięłaby resztę. Nowe
client_ip()czyta adres z nagłówka, ale wyłącznie przyTRUST_PROXYi bierze ostatni wpisX-Forwarded-For— inaczej wystarczyłobypodstawiać własny nagłówek, żeby ominąć limit całkowicie.
Weryfikacja
link_crypto: dowód, że tajny opis nie występuje w bajtach nasieci, plus odrzucenie obcego klucza / przestawionego bitu / przekleconej
ścieżki / przestawionej ramki / przeterminowanej koperty / urwanego strumienia.
X-Forwarded-Fornie resetujewiadra — sprawdzone celowym zepsuciem implementacji.
klucz jednej pary nie otwiera drugiej.
i klucz łącza; surowe
httpxdozwolone tylko na/health.Uwaga do wdrożenia
TRUST_PROXY,LINK_ENCRYPTION_REQUIREDi klucze ustawia PR dodeploy.Domyślnie wyłączone — lokalnie bez sekretów aplikacja działa jak dotąd
(moduł przepuszcza ruch i głośno mówi o tym w logach). Kolejność merge'a ma
znaczenie — najpierw ten PR (obrazy muszą umieć szyfrować), potem manifesty;
szczegóły w instrukcji.
fix(prezentacja): limit żądań po adresie klienta, nie proxy (PRE-16)to feat(bezpieczeństwo): HTTPS + szyfrowanie łączy między warstwami (PRE-16)View command line instructions
Checkout
From your project repository, check out a new branch and test the changes.