Mám zmätok v pojmoch v tejto oblasti. Čo je to SSL, TLS a HTTPS? Aké sú medzi nimi rozdiely?
TLS je nový názov pre protokol SSL. Konkrétne, protokol SSL sa dostal do verzie 3.0; TLS 1.0 je "SSL 3.1". V súčasnosti definované verzie TLS zahŕňajú TLS 1.1 a 1.2. Každá nová verzia pridáva niekoľko funkcií a upravuje niektoré vnútorné detaily. Niekedy hovoríme "SSL/TLS".
HTTPS je HTTP v rámci SSL/TLS. SSL (TLS) vytvára zabezpečený obojsmerný tunel pre ľubovoľné binárne údaje medzi dvoma hostiteľmi. HTTP je protokol na odosielanie požiadaviek a prijímanie odpovedí, pričom každá požiadavka a odpoveď pozostáva z podrobných hlavičiek a (prípadne) určitého obsahu. Protokol HTTP je určený na prevádzku cez obojsmerný tunel pre ľubovoľné binárne údaje; ak je tento tunel spojením SSL/TLS, potom sa celok nazýva "HTTPS".
Na vysvetlenie skratiek:
Protokoly SSL a TLS sú protokoly, ktorých cieľom je zabezpečiť súkromie a integritu údajov medzi dvoma stranami (pozri RFC 2246) a ktoré sú navrhnuté na prevádzku cez spoľahlivý komunikačný protokol (zvyčajne TCP). Hoci špecifikácia TLS nehovorí o soketoch, návrh SSL/TLS bol urobený tak, aby ich aplikácie mohli používať takmer ako tradičné sokety TCP, napríklad SSLSocket
v Jave rozširuje Socket
(sú tu však malé rozdiely z hľadiska použiteľnosti).
HTTPS je HTTP cez SSL/TLS, kde sa najprv vytvorí spojenie SSL/TLS a potom sa cez toto spojenie SSL/TLS vymieňajú bežné údaje HTTP.
To, či sa na tento účel použije protokol SSL alebo TLS, závisí od konfigurácie vášho prehliadača a servera (zvyčajne existuje možnosť povoliť protokoly SSLv2, SSLv3 alebo TLS 1.x).
Podrobnosti o tom, ako protokoly HTTP a SSL/TLS tvoria protokol HTTPS, nájdete v dokumente RFC 2818.
Pokiaľ ide o rozdiel medzi SSL a TLS, možno vás zaujmú tieto dve odpovede, ktoré som napísal na podobné otázky na StackOverflow a ServerFault:
TLSv1.0 by ste mohli považovať za SSLv3.1 (v skutočnosti sa to'deje v rámci vymieňaných záznamov). Je'len jednoduchšie porovnať TLSv1.0 s TLSv1.1 a TLSv1.2, pretože všetky boli upravené v rámci IETF a majú viac-menej rovnakú štruktúru. SSLv3 je upravovaná inou inštitúciou (Netscape), je to trochu ťažšie, takže zistiť rozdiely.
Tu je niekoľko rozdielov, ale pochybujem, že ich dokážem vymenovať všetky:
- V správe ClientHello (prvá správa odoslaná klientom, ktorou sa iniciuje handshake) je verzia {3,0} pre SSLv3, {3,1} pre TLSv1.0 a {3,2} pre TLSv1.1.
- ClientKeyExchange sa líši.
- MAC/HMAC sa líši (TLS používa HMAC, zatiaľ čo SSL používa skoršiu verziu HMAC).
- Odvodenie kľúča sa líši.
- Klient môže posielať aplikačné údaje hneď po odoslaní správy SSL/TLS Finished v SSLv3. V TLSv1 musí počkať na správu Finished od servera.
- Zoznam súborov šifier sa líši (a niektoré z nich boli premenované z SSL* na TLS*, pričom sa zachovalo rovnaké identifikačné číslo).
- Rozdiely sú aj v súvislosti s novým rozšírením opätovného vyjednávania. Vo všeobecnosti platí, že čím vyššia verzia alebo SSL/TLS, tým je bezpečnejšia, za predpokladu, že si správne vyberiete aj sady šifier (vyššie verzie TLS ponúkajú aj používanie sád šifier, ktoré sa považujú za lepšie). (SSLv2 sa považuje za nezabezpečenú.) Okrem toho SSL nespadá do pôsobnosti IETF. Napríklad oprava TLS renegotiation musela byť dodatočne upravená pre SSLv3 (hoci zásobníky SSL/TLS museli byť aj tak aktualizované). Možno vás bude zaujímať aj táto odpoveď:
STARTTLS
v LDAP/SMTP). Je to opísané v RFC 2817. Pokiaľ viem, takmer nikdy sa nepoužíva (a nepoužíva sa ani https://
v prehliadačoch). Hlavnou relevantnou časťou tohto RFC je časť o CONNECT
pre HTTP proxy servery (používajú ju HTTP proxy servery na sprostredkovanie HTTPS spojení).Pojmy SSL a TLS sa často používajú zameniteľne alebo v spojení (TLS/SSL), ale v skutočnosti je jeden predchodcom druhého - SSL 3.0 slúžil ako základ pre TLS 1.0, ktorý sa preto niekedy označuje ako SSL 3.1.
Z hľadiska bezpečnosti sa oba považujú za rovnako zabezpečené
Hlavný rozdiel spočíva v tom, že zatiaľ čo spojenia SSL sa začínajú zabezpečením a priamo prechádzajú na zabezpečenú komunikáciu, spojenia TLS sa najprv začínajú nezabezpečeným "hello" na server a na zabezpečenú komunikáciu sa prejde až po úspešnom handshake medzi klientom a serverom. Ak sa z akéhokoľvek dôvodu nepodarí uskutočniť TLS handshake, spojenie sa nikdy nevytvorí.
Protokol HTTP sa používa na vyžiadanie a prijímanie údajov a protokol https, v ktorom 's' nie je nič iné ako zabezpečený protokol SSL, vďaka ktorému je činnosť vyžiadania a prijímania protokolu http šifrovaná, takže žiadny útočník sprostredkovateľ nemôže ľahko získať údaje.
potom je vaše spojenie s webovým serverom nešifrované, všetky údaje budú odoslané v otvorenom texte, ktorýkoľvek útočník môže tieto údaje získať a zobraziť.
obidve sú rovnaké, ale TLS je rozšíriteľnejšie a dúfam, že v budúcnosti bude mať väčšiu podporu a TLS je spätne kompatibilné.