Dlaczego nie używać protokołu HTTPS do wszystkiego?

126

Gdybym konfigurował serwer i miał certyfikat (y) SSL, dlaczego nie miałbym używać HTTPS dla całej witryny zamiast tylko do zakupów / logowania? Myślę, że bardziej sensowne byłoby po prostu zaszyfrowanie całej witryny i całkowite zabezpieczenie użytkownika. Zapobiegnie to problemom, takim jak podjęcie decyzji, co należy zabezpieczyć, ponieważ wszystko byłoby, i nie jest to tak naprawdę niedogodność dla użytkownika.

Gdybym już korzystał z protokołu HTTPS dla części witryny, dlaczego nie miałbym go używać w całej witrynie?

To jest pytanie pokrewne: Dlaczego https jest używany tylko do logowania? , ale odpowiedzi nie są satysfakcjonujące. Odpowiedzi zakładają, że nie udało Ci się zastosować protokołu HTTPS w całej witrynie.

Malfist
źródło
2
Zdumiewa mnie, że firmy świadczące usługi finansowe nadal używają protokołu http.
Tom Hawtin - tackline
15
@Tom Chciałbym, aby niektóre strony wysyłające mi wiadomości phishingowe korzystały z protokołu https w swoich sfałszowanych witrynach, więc wiem, że przekazuję moje dane właściwemu phisherowi.
WhirlWind
Dziękuję, że zadałeś to pytanie. Zakładałem, że powodem była wydajność i byłaby znacznie gorsza niż http. Widząc odpowiedzi, wydaje mi się, że wykonanie nie jest strasznie złe, co też mnie zastanawia.
sundar - Przywróć Monikę
4
Myślę, że wybrałeś najgorszą odpowiedź na stronie, z obecnymi 11 głosami negatywnymi. Wybrana przez Ciebie odpowiedź całkowicie pomija bezpieczeństwo i najlepsze praktyki.
wieża
5
To pytanie naprawdę zasługuje na wykształconą, nowoczesną odpowiedź.
Old Badman Grey

Odpowiedzi:

17

Przychodzi mi do głowy kilka powodów.

  • Niektóre przeglądarki mogą nie obsługiwać SSL.
  • SSL może nieco obniżyć wydajność. Jeśli użytkownicy pobierają duże, publiczne pliki, ich szyfrowanie za każdym razem może być obciążone przez system.
Trąba powietrzna
źródło
137
Jakie przeglądarki nie obsługują SSL?
Malfist
6
Niektóre kompilacje lynx nie obsługują tego. Jeśli obsługujesz tylko nowsze przeglądarki, wszystko powinno być w porządku.
WhirlWind
5
Przeglądałem to: iweb.tntech.edu/hexb/publications/https-STAR-03122003.pdf „Po nasyceniu serwera wydajność systemu HTTPS osiąga około 67% HTTP pod względem przepustowości”.
WhirlWind
16
Nie t buy this explanation. 1) Donużywam przeglądarki, która w 2013 roku nie obsługuje SSL. 2) Nawet Google używa teraz SSL 3) Prawidłowo skonfiguruj, możesz przekierować ruch http na właściwy link https.
jfyelle
4
Zła odpowiedź, dlaczego tak manu upvotes? Jaka przeglądarka na świecie nie obsługuje SSL, a użytkownicy nie muszą pamiętać wpisywania https, można to obsłużyć za pomocą przekierowań
Sanne
25

Oprócz innych powodów (szczególnie związanych z wydajnością) możesz hostować tylko jedną domenę na jeden adres IP * podczas korzystania z protokołu HTTPS.

Pojedynczy serwer może obsługiwać wiele domen w protokole HTTP, ponieważ nagłówek HTTP serwera informuje serwer, z której domeny ma odpowiedzieć.

W przypadku protokołu HTTPS serwer musi zaoferować klientowi swój certyfikat podczas wstępnego uzgadniania protokołu TLS (czyli przed uruchomieniem protokołu HTTP). Oznacza to, że nagłówek serwera nie został jeszcze wysłany, więc serwer nie ma sposobu, aby dowiedzieć się, która domena jest żądana i który certyfikat (www.foo.com lub www.bar.com) ma odpowiedzieć.


* Przypis: z technicznego punktu widzenia możesz hostować wiele domen, jeśli hostujesz je na różnych portach, ale zazwyczaj nie jest to możliwe. Możesz także hostować wiele domen, jeśli Twój certyfikat SSL zawiera symbol wieloznaczny. Na przykład możesz hostować zarówno foo.example.com, jak i bar.example.com z certyfikatem * .example.com

Eadwacer
źródło
5
Czy posiadanie certyfikatu Wildcard SSL nie rozwiązałoby tego problemu?
Rob
Przypis zaprzecza odpowiedzi: / możesz używać certyfikatów z symbolami wieloznacznymi i hostować dowolne domeny. en.wikipedia.org/wiki/Wildcard_certificate
lucascaro
23
Ten problem już dawno został rozwiązany przez usługę Server Name Indication, która jest obecnie obsługiwana przez wszystkie główne przeglądarki. en.wikipedia.org/wiki/Server_Name_Indication
tia
@tia, z wyjątkiem tego, że nie wszystkie serwery internetowe ją obsługują
meffect
2
@meffect ... Ale wiele, w tym apache2, nginx, lighttpd i nodejs. Poza tym programista może wybrać, jakiego odwrotnego serwera proxy używa do tunelowania HTTPS. Powiedzenie „żaden klient go nie obsługuje” byłoby poprawnym argumentem, gdyby było prawdą, ponieważ jest to coś, nad czym deweloper nie ma kontroli i musi to uwzględnić. Jednak stwierdzenie „niektóre serwery tego nie obsługują” jest w dużej mierze bez znaczenia, właśnie dlatego, że nie trzeba tego uwzględniać. Zwłaszcza, gdy wszystkie serwery mainstreamu czy rzeczywiście mają poparcie.
Parthian Shot
13

SSL / TLS nie jest używany wystarczająco często. HTTPS musi być używany przez całą sesję , w żadnym momencie nie można przesyłać identyfikatora sesji przez HTTP. Jeśli używasz protokołu HTTPS tylko do logowania, to w oczywisty sposób naruszasz 10 najlepszych OWASP na rok 2010 „A3: Uszkodzone uwierzytelnianie i zarządzanie sesjami”.

wieża
źródło
To może być zbyt szerokie założenie. Nie ma powodu, dla którego stan sesji nie może być zarządzany oddzielnie dla protokołu http i https za pośrednictwem pojedynczej operacji logowania za pomocą protokołu HTTPS. Prawdopodobnie będzie to wymagało więcej pracy niż jest warte i będzie powodować błędy związane z bezpieczeństwem, ale nie wydaje się automatycznie stanowić wyraźnego naruszenia.
Einstein
@Einstein, przeczytaj OWASP A3, jest on bardzo jasno sformułowany. Należy pamiętać, że atakujący nie potrzebuje nazwy użytkownika / hasła, jeśli ma plik cookie z uwierzytelnionej sesji.
wieża
Witryna zapewnia mieszane https / http. Logowanie https zapewnia oddzielne tokeny sesji o niskim i wysokim poziomie bezpieczeństwa. Tokeny o niskim poziomie bezpieczeństwa przypisane tylko do sesji http nie będą działać w przypadku operacji wymagających wysokiego bezpieczeństwa. Z mojej lektury OWASP A3 mizernie ilustruje podstawowy problem możliwości dostępu o wysokim poziomie bezpieczeństwa poprzez transport o niskim poziomie bezpieczeństwa.
Einstein
@Einstein Więc nie zgadzasz się z tym, że identyfikatory sesji są używane do uwierzytelniania przeglądarek internetowych? Weź pod uwagę ten wzorzec ataku, w atakach xss próbujesz uzyskać wartość, document.cookieaby osoba atakująca mogła użyć jej do uwierzytelnienia. Wartość tę można również uzyskać poprzez podsłuchiwanie ruchu, który zatrzymuje https. Nie jestem do końca pewien, o co ci chodzi.
wieża
W twoim scenariuszu identyfikator sesji dla http byłby bezwartościowy dla zasobów chronionych https, gdyby system utworzył dwie oddzielne sesje dla jednej akcji uwierzytelniania, aby umożliwić używanie obu protokołów bez sesji https i powiązanych zasobów ujawnionych przez sesyjny plik cookie http. Na przykład sesja http może być wykorzystana do identyfikacji dostępu do zasobów publicznych do celów raportowania lub dostępu do publicznych forów dyskusyjnych, ale nie będą one ważne dla zasobów bezpiecznych.
Einstein
12

Dlaczego nie wysłać każdego listu pocztowego w zabezpieczonej przed fałszerstwami, nieprzezroczystej kopercie listem poleconym? Ktoś z urzędu pocztowego zawsze miałby nad tym osobistą opiekę, więc możesz być prawie pewien, że nikt nie podsłuchuje Twojej poczty. Oczywiście odpowiedź jest taka, że ​​chociaż część poczty jest warta swojej ceny, większość nie jest. Nie obchodzi mnie, czy ktoś przeczyta moje „Cieszę się, że wyszedłeś z więzienia!” pocztówka do wujka Joe.

Szyfrowanie nie jest darmowe i nie zawsze pomaga.

Jeśli sesja (taka jak zakupy, bankowość itp.) Zakończy się przy użyciu HTTPS, nie ma powodu, aby nie wykonywać całej sesji HTTPS tak wcześnie, jak to możliwe.

Moim zdaniem HTTPS powinien być używany tylko wtedy, gdy jest to nieuniknione konieczne, ponieważ żądanie lub odpowiedź muszą być zabezpieczone przed pośrednim podsłuchiwaniem. Jako przykład spójrz na Yahoo! strona główna. Mimo że jesteś zalogowany, większość interakcji będzie odbywać się za pośrednictwem protokołu HTTP. Uwierzytelniasz przez HTTPS i otrzymujesz pliki cookie, które potwierdzają Twoją tożsamość, więc nie potrzebujesz HTTPS do czytania wiadomości.

David M.
źródło
LOL!!! Wspaniały! Założę się, że nieuczciwy listonosz otwierający kopertę słowami „Cieszę się, że wyszedłeś z więzienia” nieco
zwariuje w
19
Gdyby przesyłka polecona kosztowała 1% więcej zamiast 300% więcej, użyłbym jej do wszystkiego.
rozpuszczalna ryba
3
You authenticate over HTTPS and get cookies that prove your identity, so you don't need HTTPS to read news stories.To nie jest właściwy sposób obsługi uwierzytelniania sesji. Pliki cookie należy ustawić z flagą SECURE. Ale pomijając przez chwilę tę okropną poradę dotyczącą bezpieczeństwa ... Twoja analogia do poczty nie jest tak naprawdę dokładna z kilku powodów. Jedną z nich jest to, że zazwyczaj nie można wstrzykiwać exploitów do poczty zwrotnej, bezkarnie podszywać się pod kogoś innego lub wrzucić wiadomość „Twoja sesja wygasła” do poczty zwrotnej, aby ponownie wprowadzić dane uwierzytelniające, których używają w Yahoo! i ich banku.
Parthian Shot
Ponowne użycie haseł i utrwalanie sesji nie są, między innymi, problemem w zwykłej poczcie.
Parthian Shot
To dobre punkty, ale stosujesz analizę z 2016 r. Do dyskusji w 2010 r.
David M,
12

Największym powodem, poza obciążeniem systemu, jest to, że łamie wirtualny hosting oparty na nazwach. Z SSL to jedna witryna - jeden adres IP. Jest to dość drogie, a także trudniejsze w zarządzaniu.

Adam Wright
źródło
+1 Jest to powód, dla którego Google App Engine nie obsługuje protokołu HTTPS w domenach niestandardowych. Czekam na szersze wsparcie dla TLS-SNI.
Sripathi Krishnan
1
Możesz to odzyskać za pomocą sprzętu kończącego SSL. A jeśli obciążenie systemu jest problemem (dla wielu ludzi!), To i tak sprzętowy SSL może być dobrym rozwiązaniem.
Jason
z wyjątkiem tego, że możesz mieć wiele domen w tym samym certyfikacie.
lucascaro
10
Wcale nieprawda. (W każdym razie już nie.)
Parthian Shot
7
Głosowanie w dół, ponieważ informacje w poście są nieaktualne. SNI jest teraz obsługiwany przez wszystkie główne przeglądarki.
Martin Törnwall
5

W przypadku łączy o dużym opóźnieniu początkowe uzgadnianie TLS wymaga dodatkowych podróży w obie strony w celu sprawdzenia łańcucha certyfikatów (w tym wysłania wszelkich certyfikatów pośrednich), uzgodnienia mechanizmów szyfrowania i ustanowienia sesji. Po ustanowieniu sesji kolejne żądania mogą wykorzystywać buforowanie sesji w celu zmniejszenia liczby obiegów w obie strony, ale nawet w tym najlepszym przypadku nadal jest więcej połączeń w obie strony niż wymaga normalne połączenie HTTP. Nawet jeśli operacje szyfrowania były bezpłatne, podróże w obie strony nie są i mogą być dość zauważalne w przypadku wolniejszych łączy sieciowych, zwłaszcza jeśli witryna nie wykorzystuje potoków http. Nie stanowi to problemu dla użytkowników szerokopasmowych w dobrze połączonym segmencie sieci. Jeśli prowadzisz działalność międzynarodową, wymaganie protokołu HTTPS może łatwo spowodować zauważalne opóźnienia.

Istnieją dodatkowe kwestie, takie jak utrzymanie stanu sesji na serwerze, wymagające potencjalnie znacznie większej ilości pamięci i oczywiście operacji szyfrowania danych. Każda mała witryna praktycznie nie musi się martwić ani o dane możliwości serwera, ani o koszt dzisiejszego sprzętu. Każda duża witryna z łatwością mogłaby pozwolić sobie na odciążenie procesora / w AES lub dodatkowe karty, aby zapewnić podobną funkcjonalność.

Wszystkie te problemy stają się coraz bardziej nieistotne w miarę upływu czasu i ulepszania możliwości sprzętu i sieci. W większości przypadków wątpię, czy dzisiaj jest jakaś namacalna różnica.

Mogą istnieć względy operacyjne, takie jak ograniczenia administracyjne w ruchu https (pomyśl o pośrednich filtrach zawartości… i tak dalej), ewentualnie niektóre regulacje korporacyjne lub rządowe. Niektóre środowiska korporacyjne wymagają odszyfrowania danych na obrzeżach, aby zapobiec wyciekowi informacji ... interferencji z hotspotami i podobnymi systemami dostępu opartymi na sieci, które nie są zdolne do wstrzykiwania wiadomości w transakcjach https. Pod koniec dnia, moim zdaniem, powody, dla których domyślnie nie korzystamy z protokołu HTTPS, będą prawdopodobnie dość małe.

Einstein
źródło
4

Protokół https wymaga więcej zasobów niż zwykły protokół http.

Wymaga więcej zarówno od serwerów, jak i od klientów.

Johan
źródło
3

Jeśli cała sesja jest zaszyfrowana, nie będziesz mógł używać buforowania dla statycznych zasobów, takich jak obrazy i js na poziomie proxy, np. ISP.

Aleksiej Tenitski
źródło
Cóż, z wyjątkiem serwerów proxy kończących SSL lub jeśli używasz CDN obsługującego HTTPS.
Parthian Shot
3

Powinieneś używać protokołu HTTPS wszędzie, ale stracisz:

  1. Zdecydowanie nie powinieneś używać kompresji SSL ani kompresji HTTP przez SSL z powodu ataków typu BREACH i CRIME. Nie ma więc kompresji, jeśli twoja odpowiedź zawiera identyfikatory sesji lub csrf. Możesz temu zaradzić, umieszczając swoje statyczne zasoby (obrazy, js, css) w domenie bez plików cookie i używając tam kompresji. Możesz także użyć minifikacji HTML.

  2. Jeden certyfikat SSL, jeden adres IP, chyba że korzystasz z SNI, który nie działa na wszystkich przeglądarkach (stary Android, Blackberry 6 itd.).

  3. Nie powinieneś umieszczać na swoich stronach żadnych treści zewnętrznych, które nie są przesyłane przez SSL.

  4. Utracisz wychodzący nagłówek HTTP Referer, gdy przeglądarka przechodzi na stronę HTTP, co może, ale nie musi, stanowić dla Ciebie problem.

Neil McGuigan
źródło
0

Cóż, oczywistym powodem jest wydajność: wszystkie dane będą musiały zostać zaszyfrowane przez serwer przed transmisją, a następnie odszyfrowane przez klienta po otrzymaniu, co jest stratą czasu, jeśli nie ma danych wrażliwych. Może też wpływać na ilość pamięci podręcznej witryny.

Jest to również potencjalnie mylące dla użytkowników końcowych, jeśli wszystkie adresy używają, https://a nie znajomych http://. Zobacz również tę odpowiedź:

Dlaczego nie zawsze używać protokołu HTTPS podczas dołączania pliku js?

Will Vousden
źródło
9
dlaczego miałoby to zmylić użytkowników? Ilu rzeczywiście patrzy na protokół URI?
Malfist
Dziś, 10 lat później, https jest bardziej powszechny i ​​http byłby mylący
madprops
0

Protokół https wymaga od serwera szyfrowania i odszyfrowywania żądań i odpowiedzi klientów. Wpływ na wydajność będzie się sumował, jeśli serwer obsługuje wielu klientów. Dlatego większość obecnych implementacji protokołu HTTPS ogranicza się tylko do uwierzytelniania hasłem. Ale wraz ze wzrostem mocy obliczeniowej może się to zmienić, w końcu Gmail używa SSL dla całej witryny.

futureelite7
źródło
0

Oprócz odpowiedzi WhirlWind należy wziąć pod uwagę koszt i zastosowanie certyfikatów SSL, problemy z dostępem (jest możliwe, choć mało prawdopodobne, że klient może nie być w stanie komunikować się przez port SSL) itp.

Korzystanie z SSL nie jest gwarantem bezpieczeństwa. Ten rodzaj ochrony należy wbudować w architekturę aplikacji, a nie próbować polegać na jakimś magicznym pocisku.

3Dave
źródło
2
Ponieważ użytkownik już chroni część witryny, koszt certyfikatu jest mniej więcej dyskusyjny.
futureelite 7
2
@ futureelite7 dobra uwaga, ale prawdopodobnie istotna dla innych, którzy mogą badać ten temat w przyszłości.
Zapisz
Featuryzm jest wrogiem bezpieczeństwa. Większość słabości moich własnych rzeczy ma swoje korzenie w jakiejś nierozsądnej funkcji, którą ja lub poprzednik zaakceptowałem w planie produktu. Uważam, że uruchomienie funkcji, ponieważ powoduje lukę w zabezpieczeniach, nie czyni cię bardziej popularnym niż odrzucenie jej. Popularność NIE POWINNA mieć znaczenia, ale niestety może i ma znaczenie. Na twoim miejscu zadałbym sobie pytanie, jak bardzo chcę mieć do czynienia z niezabezpieczonymi użytkownikami lub czy aplikacja jest odpowiednia nawet dla użytkowników, którzy nie mogą używać szyfrowania (pomyśl: bankowość, polityka, aktywizm).
Jason
0

Powiedziano mi, że w jednym projekcie w naszej firmie odkryli, że przepustowość zajmowana przez wiadomości SSL była znacznie większa niż w przypadku zwykłych wiadomości. Myślę, że ktoś powiedział mi, że to zdumiewające 12 razy więcej danych. Sam tego nie zweryfikowałem i brzmi to bardzo wysoko, ale jeśli do każdej strony jest dodany jakiś nagłówek, a większość stron ma niewielką ilość treści, może to nie być tak daleko.

To powiedziawszy, kłopot z przechodzeniem między http i https i śledzeniem, które strony są, co wydaje mi się zbyt dużym wysiłkiem. Tylko raz próbowałem zbudować witrynę, która je pomieszała i ostatecznie porzuciliśmy ten plan, gdy wpadliśmy na złożone rzeczy, takie jak wyskakujące okienka utworzone przez Javascript, w którym został dołączony niewłaściwy protokół i tego typu rzeczy. Skończyło się na tym, że cała witryna https była mniej kłopotliwa. Wydaje mi się, że w prostych przypadkach, gdy masz tylko ekran logowania i ekran płatności, które muszą być chronione i są to proste strony, łączenie i dopasowywanie nie byłoby wielkim problemem.

Nie martwiłbym się zbytnio o obciążenie klienta związane z odszyfrowaniem. Zwykle klient będzie spędzał dużo więcej czasu na oczekiwaniu na przesyłanie danych, niż na ich przetworzenie. Dopóki użytkownicy rutynowo nie mają połączeń internetowych o prędkości gigabitowej na sekundę, moc przetwarzania klienta prawdopodobnie nie ma znaczenia. Innym problemem jest moc procesora wymagana przez serwer do szyfrowania stron. Mogą istnieć problemy z tym, że nie jest w stanie nadążyć za setkami lub tysiącami użytkowników.

Sójka
źródło
1
Dodatkowa przepustowość jest niewielka nawet w najgorszym przypadku.
Prezydent James K. Polk
0

Jeszcze jeden mały punkt (może ktoś może zweryfikować), jeśli użytkownik wpisze dane w elemencie formularza, takim jak pole tekstowe, a następnie z jakiegoś powodu odświeży stronę lub serwer ulegnie awarii na sekundę, dane wprowadzone przez użytkownika zostaną utracone za pomocą HTTPS, ale jest zachowywany przy użyciu protokołu HTTP.

Uwaga: nie jestem pewien, czy jest to specyficzne dla przeglądarki, ale z pewnością dzieje się tak w mojej przeglądarce Firefox.

toc777
źródło
0

Windows Server 2012 z IIS 8.0 oferuje teraz SNI, które jest wskazaniem nazwy serwera, które umożliwia hostowanie wielu aplikacji internetowych SSL w usługach IIS pod jednym adresem IP.

Webmaister
źródło
1
Co to ma wspólnego z pytaniem? To interesująca funkcja, ale nie widzę znaczenia.
user1618143