Ponieważ odpowiedzi wydają się być wszędzie (tak, nie, może być, powinno), pozwólcie mi najpierw powtórzyć odpowiedź @ waiwai933: jest bezpieczna.
Mówiąc konkretnie, zapytałeś : "Gdyby ten złośliwy użytkownik węszył wszystkie moje przychodzące i wychodzące pakiety. Czy może obliczyć te same klucze i odczytać również mój zaszyfrowany ruch, a nawet wysłać zaszyfrowane wiadomości do serwera w moim imieniu?" Odpowiedź brzmi: nie i nie. Z przypisem.
Powód, dla którego nie może obliczyć tych samych kluczy, wydaje się paradoksalny i w rzeczywistości był przełomem w kryptografii, kiedy została po raz pierwszy opublikowana przez Diffiego i Hellmana. TLS wykorzystuje protokół wymiany kluczy, taki jak Diffie-Hellman, ale jest bardziej wyrafinowany, aby chronić przed atakami typu man-in-the-middle. Protokół umożliwia dwóm osobom, które nigdy wcześniej nie wymieniły informacji, obliczenie tajnego klucza, którego nikt nie widzi wszystkich wiadomości, nie może obliczyć.
Gdy masz wspólny tajny klucz, możesz go użyć do szyfrowania ruchu. Ponieważ złośliwy użytkownik nie zna klucza, nie może zaszyfrować ruchu, który wygląda tak, jakby pochodził od Ciebie.
Teraz te przypisy.
- Zakładamy, że protokół SSL / TLS jest poprawny. W przypadku większości protokołów kryptograficznych od czasu do czasu są wykrywane i naprawiane błędy. SSL / TLS miał ostatnio błąd (wspomniany w kilku odpowiedziach jako powód, dla którego nie jest bezpieczny), jednak został on tymczasowo obejść i teraz naprawiony (RFC 5746), a poprawka jest w różne etapy wdrażania. (W twoim scenariuszu błąd pozwolił złośliwemu użytkownikowi na wysyłanie pakietów w twoim imieniu, ale nie odczytanie twojego ruchu.) Zawsze jest możliwe, że atakujący wie, jak złamać TLS / SSL z powodu nieopublikowanego błędu w protokole.
- Rzecz oczywista, ale warta powtórzenia: złośliwy użytkownik może zobaczyć Twoje żądanie i wysłać własną odpowiedź, używając własnego certyfikatu. Więc sprawdź certyfikat.
- Być może kolejny oczywisty punkt: możesz być pewien, że protokół SSL / TLS będzie używany na przyszłych stronach tylko wtedy, gdy bieżąca strona korzysta z protokołu HTTPS. Na przykład, jeśli jesteś na stronie HTTP, która chce, abyś się zalogował, iz wcześniejszych doświadczeń wiesz, że kliknięcie przycisku logowania przekieruje Cię do połączenia HTTPS, ta funkcja może zostać usunięta przez aktywnego złośliwego użytkownika w Twojej sieci. Dlatego loguj się tylko na strony, które już korzystają z protokołu HTTPS (chyba że wiesz, jak wykryć, czy strona logowania została zmodyfikowana).