Jak weryfikowane są certyfikaty ssl?

219

Jaka jest seria kroków niezbędnych do bezpiecznego zweryfikowania certyfikatu ssl? Rozumiem (bardzo ograniczone), że kiedy odwiedzasz witrynę https, serwer wysyła certyfikat do klienta (przeglądarki), a przeglądarka pobiera informacje o wystawcy certyfikatu z tego certyfikatu, a następnie używa go do skontaktowania się z wystawcą i w jakiś sposób porównuje certyfikaty ważności.

  • Jak dokładnie to się robi?
  • Co z tym procesem czyni go odpornym na ataki typu man-in-the-middle?
  • Co uniemożliwia przypadkowej osobie skonfigurowanie własnej usługi weryfikacyjnej do użycia w atakach typu man-in-the-middle, aby wszystko „wyglądało” bezpiecznie?
rcreswick
źródło
uznał ten film za bardzo pomocny w zrozumieniu przepływu youtube.com/watch?v=T4Df5_cojAs
Krishna

Odpowiedzi:

308

Oto bardzo uproszczone wyjaśnienie:

  1. Twoja przeglądarka internetowa pobiera certyfikat serwera WWW, który zawiera klucz publiczny serwera WWW. Ten certyfikat jest podpisany kluczem prywatnym zaufanego urzędu certyfikacji.

  2. Twoja przeglądarka jest dostarczana z kluczami publicznymi wszystkich głównych urzędów certyfikacji. Używa tego klucza publicznego, aby sprawdzić, czy certyfikat serwera WWW został rzeczywiście podpisany przez zaufany urząd certyfikacji.

  3. Certyfikat zawiera nazwę domeny i / lub adres IP serwera WWW. Twoja przeglądarka internetowa potwierdza urząd certyfikacji, że adres wymieniony w certyfikacie jest adresem, z którym ma otwarte połączenie.

  4. Twoja przeglądarka internetowa generuje współdzielony klucz symetryczny, który będzie używany do szyfrowania ruchu HTTP na tym połączeniu; jest to o wiele bardziej wydajne niż używanie do wszystkiego szyfrowania kluczem publicznym / prywatnym. Twoja przeglądarka szyfruje klucz symetryczny za pomocą klucza publicznego serwera WWW, a następnie wysyła go z powrotem, zapewniając w ten sposób, że tylko serwer internetowy może go odszyfrować, ponieważ tylko serwer internetowy ma swój klucz prywatny.

Należy pamiętać, że urząd certyfikacji (CA) jest niezbędny do zapobiegania atakom typu man-in-the-middle. Jednak nawet niepodpisany certyfikat uniemożliwi pasywne nasłuchiwanie zaszyfrowanego ruchu, ponieważ nie ma on możliwości uzyskania dostępu do współdzielonego klucza symetrycznego.

Eli Courtwright
źródło
4
Około kroku 1.5 serwer również „podpisuje” coś kluczem prywatnym powiązanym z jego certyfikatem. Łączy się to z sprawdzaniem nazwy / adresu IP, aby zapewnić, że przedstawia ją tylko strona będąca właścicielem certyfikatu.
Darron
68
Aby zobaczyć kompletnie działający przykład tego procesu przy użyciu przeglądarki Firefox łączącej się z amazon.com , zobacz moserware.com/2009/06/first-few-milliseconds-of-https.html
Jeff Moser
9
Nie wiedziałem, że moja przeglądarka jest dostarczana z kluczami publicznymi wszystkich głównych urzędów certyfikacji. Teraz wiem, jak weryfikowane są moje certyfikaty SSL bez ryzyka MITM :). Dzięki!
OneChillDude
5
serwer musi zażądać certyfikatu od CAuthority, więc wysyła do niego żądanie. W jaki sposób urząd certyfikacji może mieć pewność, że serwer jest prawidłowy?
voipp
4
@voipp: Świetne pytanie! Historycznie istniało kilka podejść, takich jak: „wyślij wiadomość e-mail z webmaster@<domain-being-verified>lub” Umieść ten plik w domenie, aby udowodnić, że jesteś jego właścicielem. own - słynny ktoś zdołał uzyskać podejrzany urząd certyfikacji, aby wystawił im certyfikat dla gmail.com!
Eli Courtwright
58

Warto zauważyć, że oprócz zakupu certyfikatu (jak wspomniano powyżej), możesz również utworzyć własny za darmo; jest to określane jako „certyfikat z podpisem własnym”. Różnica między certyfikatem z podpisem własnym a kupionym jest prosta: zakupiony został podpisany przez urząd certyfikacji, o którym już wie Twoja przeglądarka. Innymi słowy, przeglądarka może łatwo sprawdzić autentyczność zakupionego certyfikatu.

Niestety doprowadziło to do powszechnego błędnego przekonania, że ​​samopodpisane certyfikaty są z natury mniej bezpieczne niż certyfikaty sprzedawane przez komercyjne urzędy certyfikacji, takie jak GoDaddy i Verisign, oraz że musisz przestrzegać ostrzeżeń / wyjątków przeglądarki, jeśli ich używasz; to jest niepoprawne .

Jeśli bezpiecznie rozpowszechnisz samopodpisany certyfikat (lub certyfikat CA, jak sugerował bobince) i zainstalujesz go w przeglądarkach, które będą korzystać z Twojej witryny , jest on tak samo bezpieczny, jak zakupiony i nie jest podatny na ataki typu man-in-the-middle ataki i fałszowanie certyfikatów. Oczywiście oznacza to, że jest to wykonalne tylko wtedy, gdy tylko kilka osób potrzebuje bezpiecznego dostępu do Twojej witryny (np. Wewnętrznych aplikacji, osobistych blogów itp.).

Clint Harris
źródło
1
Rzeczywiście, bezpieczna dystrybucja własnego certyfikatu jest jednym ze sposobów na skórowanie kota, ale o wiele łatwiej jest udać się do jednego z wielu tak zwanych „otwartych” urzędów certyfikacji. CACert.org jest moim ulubionym. Tak długo, jak ufasz krokom, jakie podejmują, aby zabezpieczyć wydawanie certyfikatów, importowanie certyfikatu głównego jest bezpieczne.
nsayer
6
Uwielbiam ten komentarz - niestety podkreśla on bardzo ważną słabość CA. Załóżmy, że importujesz certyfikat CA z Boba Smitha - cóż, Bob Smith może podpisać certyfikat dla dowolnej domeny (w tym google.com i chase.com). Właśnie dlatego GoDaddy / Verisign płacą duże pieniądze za włączenie się do systemu operacyjnego - są sprawdzane przez zespół bezpieczeństwa, aby upewnić się, że mają kontrole, aby upewnić się, że nie podpisują certyfikatu dla złośliwej osoby. Myślę, że powinieneś być w stanie powiedzieć „ten urząd certyfikacji może podpisywać tylko certyfikaty dla mysite.com”.
Natalie Adams
Certyfikat samopodpisany nie jest bezpieczniejszy, ponieważ urzędy certyfikacji mogą zapłacić za podpisanie czegoś, czego nie powinny. Jeśli możesz bezpiecznie dystrybuować certyfikaty CA do punktów końcowych, zawsze korzystaj z certyfikatów z podpisem własnym.
javaPhobic
Czy są jakieś CA, które są bezpłatne i zweryfikowane w większości głównych przeglądarek? Szukam podstawowego certyfikatu służącego jedynie do sprawdzenia, czy posiadam adres e-mail i nazwę domeny. Tych, których znalazłem, nie ma jednak w większości głównych przeglądarek.
Alex Kwitny
@NathanAdams Teoretycznie duże urzędy certyfikacji powinny sprawdzać wnioski, aby nie wydawać fałszywych certyfikatów, jak to opisujesz
nsayer
38

Ty to powiedziałeś

przeglądarka pobiera informacje o wystawcy certyfikatu z tego certyfikatu, a następnie używa go do skontaktowania się z wystawcą i w jakiś sposób porównuje certyfikaty pod kątem ważności.

Klient nie musi sprawdzać u wystawcy, ponieważ dwie rzeczy:

  1. wszystkie przeglądarki mają wstępnie zainstalowaną listę wszystkich głównych kluczy publicznych urzędów certyfikacji
  2. certyfikat jest podpisany, a sam podpis jest wystarczającym dowodem na to, że certyfikat jest ważny, ponieważ klient może upewnić się, że sam i bez kontaktu z serwerem wystawcy jest autentyczny. Na tym polega piękno szyfrowania asymetrycznego.

Zauważ, że 2. nie da się zrobić bez 1.

To lepiej wyjaśniono na tym dużym diagramie, który stworzyłem jakiś czas temu

(przejdź do „co to jest podpis?” na dole)

kropelka

ychaouche
źródło
9
To powinna być zaakceptowana odpowiedź. Odpowiedź @Eli Courtwright jest sposobem na krótkie imho, aby zrozumieć, jak działają certyfikaty.
Felix Crazzolara
Przeczytanie tego raz może nie wystarczyć, ale jeśli znasz już fragmenty protokołu SSL, to naprawdę łączy wszystko. Dobra robota!
Cameron Gagnon,
Fantastyczny obraz. Wreszcie coś, co wyjaśnia moje pytania. Wszędzie, gdzie idę dogłębnie powiedziałem „przeglądarka sprawdza, czy certyfikat jest poprawny”. ALE JAK TO ROBI TO? To daje odpowiedź.
ori6151
8

Klient ma wstępnie zaszczepiony magazyn kluczy publicznych urzędów certyfikacji SSL. Aby serwer mógł być zaufany, musi istnieć łańcuch zaufania od certyfikatu dla serwera, przez pośrednie organy aż do jednego z tak zwanych certyfikatów „root”.

Możesz sprawdzić i / lub zmienić listę zaufanych organów. Często robisz to, aby dodać certyfikat dla lokalnego organu, któremu ufasz - na przykład firmy, w której pracujesz, szkoły, do której uczęszczasz, lub czegoś takiego.

Lista wstępnie zaszczepiona może się różnić w zależności od używanego klienta. Duzi dostawcy certyfikatów SSL zapewniają, że ich certyfikaty główne znajdują się we wszystkich głównych przeglądarkach ($$$).

Ataki typu „małpa w środku” są „niemożliwe”, chyba że osoba atakująca ma klucz prywatny zaufanego certyfikatu głównego. Ponieważ odpowiednie certyfikaty są powszechnie wdrażane, ujawnienie takiego klucza prywatnego miałoby poważne konsekwencje dla bezpieczeństwa eCommerce ogólnie. Z tego powodu te klucze prywatne są bardzo, bardzo ściśle strzeżone.

nsayer
źródło