HTTPS

**HTTPS** (inglise keeles *Hypertext Transfer Protocol Secure* ehk **turvaline hüperteksti edastusprotokoll**) on turvaline protokoll autenditud ja krüpteeritud informatsiooni edastamiseks arvutivõrkudes. HTTPS protokolli muudab HTTP-ga võrreldes turvalisemaks liikluse edastamine üle transpordikihi turbeprotokolli (TLS) või vanema turvasoklite kihi (SSL). Tegemist on HTTP-protokolli laiendusega, mille avaldas Netscape Communications 1995. aastal oma veebibrauseri Netscape Navigatori jaoks.

HTTPS-i puhul toimub andmevahetus kasutaja ja veebiserveri vahel kolmanda osapoole jaoks loetamatul kujul ning ühendus on kaitstud vahendajarünnete eest. HTTPS-ühendusi kasutatakse sageli veebis maksete tegemisel (pankade veebisaitidel) ning tundliku informatsiooni edastamiseks suurfirmade infosüsteemides. 

Mainitud protokollidega puutub kasutaja kokku URL-i aadressireale sisestades. Kui HTTP-aadressid algavad "http://" ja kasutavad vaikimisi porti 80, siis HTTPS-aadressid algavad "https://" ja kasutavad vaikimisi **porti 443** . 

HTTPS protokolli kasutamisest olenemata on siiski oluline kontrollida URL-i usaldusväärsust ning veenduda, et veebiaadress ühtib otsitava sisuga.

Alates 2018. aasta juulist märgistab Google Chrome kõiki veebilehti, mis endiselt kasutavad HTTP protokolli, "*not secure*" sildiga, et julgustada veebiarendajaid HTTPS protokollile üle minema.

## Ülevaade
Erinevalt HTTP protokollist krüpteerib HTTPS informatsiooni, mis brauseri ja veebiserveri vahel toimub. Turvalise andmevahetuse jaoks kasutatakse asümmeetrilist krüpteerimist, mille käigus kasutavad server ja brauser oma avalikku ja privaatset võtit, et jagada sessioonivõtit, mida saab kasutada andmete dekrüpteerimiseks. Sellise algoritmiga kasutatakse paralleelselt ka digitaalsertifikaate, et serverit autentida ning vältida vahendajaründeid. 

### TLS/SSL

TLS (*Transport Layer Security*), varem SSL (*Secure Sockets Layer*), on suhtlusprotokoll, mille abil luuakse kahe seadme või rakenduse vahel turvaline ühendus läbi võrgu. Tänu nendele suhtlusprotokollidele on HTTPS märkimisväärselt turvalisem kui HTTP. Turvalise andmevahetuse jaoks peab informatsiooni saatval veebiserveril olema TLS või SSL digitaalsertifikaat, mille on loonud usaldusväärne sertimisasutus (*Certificate Authority, CA*). Saadud sertifikaat kinnitab, et veebiserveri taga on autentitud ettevõte või isik, mistõttu erinevad brauserid (nt Chrome, Firefox või Safari) saavad seda usaldada ja pidada turvaliseks ning seda vastavalt oma brauseris kuvada. Järgnevalt on toodud TLS andmevahetuse kulgemine TLS 1.2 näitel.
#### TCP kätlus
Pakettide ohutuks saatmiseks üle TCP peavad klient (kasutajaarvuti) ja server läbi viima **TCP kätluse** (*TCP [[:en:Handshake_(computing)|Handshake]]*). Selleks saadab klient serverile paketi, milles SYN (*Synchronize*) biti väärtus on 1. Server saadab tagasi paketi, milles ACK (*Acknowledge*) biti väärtus on 1 koos varem saadetud SYN samuti väärtusega 1. Viimaks saadab klient tagasi paketi ACK bitiga. Eduka kätluse korral on serveri ja kliendi vahel loodud ühendus. TCP kätluse kogu eesmärk on luua privaatne ühendus ning selle käigus andmeid veel ei vahetata.

**TLS kätlus**

TLS protokolli alustamiseks toimub **TLS kätlus**. Selleks annab esmalt klient serverile sõnumi kaudu teada (inglise *k.* "*Client Hello message*"), milliseid TLS protokolli parameetreid (sh TLS versioon ning kasutatavate šiffrite detailid) viimane toetab. Klient genereerib suvalistest bittidest koosneva rea "ClientRandom", mida kasutatakse hiljem sessioonivõtme loomiseks. Server saadab vastu TLS digisertifikaadi, et autentida end kui turvalist osapoolt, annab teada, millist TCP versiooni ning šifreid soovib kasutada ning genereerib samuti suvalistest bittidest koosneva rea nimetusega "ServerRandom". Seejärel kontrollib klient, kas serveri esitatud TLS digisertifikaat on ametlikult kinnitatud sertimisasutuse poolt, et kaitsta võimaliku vahendajaründe eest.

#### Jagatud võtme genereerimine
Klient saab TLS digisertifikaadiga ka serveri **avaliku** võtme, mida klient kasutab *pre-master* võtit sisaldava sõnumi krüpteerimiseks. Seda sõnumit saab server dekrüpteerida ainult oma **isikliku** võtmega. Klient loob seejärel *pre-master* võtme abil jagatud võtme (*shared key*) ning hoiustab selle lokaalselt.

#### Sessioonivõtmete genereerimine
Seejärel saavad server ja klient luua iseseisvalt sessioonivõtmed kasutades ClientRandom, ServerRandom ning *pre-master* võtmeid. Eduka genereerimise korral loovad nii klient kui ka server identsed võtmed ning saadavad üksteisele sõnumi "*Finished*". Kuna sessioonivõtmed on ainult serveril ja kliendil, kasutatakse sessiooni lõpuni neid võtmeid turvaliseks andmevahetuseks.

### TLS versioonid
Andmed on 2024. aasta aprilli seisuga. Aegunud TLS protokollide turvaauke on võimalik rünnete jaoks ära kasutada, mistõttu nende kasutus on rangelt mittesoovituslik.

### Pordid
Veebilehed kasutavad porte, et eristada eri liiki võrguliiklust. Portide numbrid annavad serverile informatsiooni protokollide parameetrite kohta. Näiteks port 80 vihjab serverile, et kasutuses on HTTP-protokoll, samas port 443 vastab HTTPS-le .  

HTTPS-portide näiteid:

* Port 443
* Port 631 (*Internet Printing Protocol* *Secure* (IPPS) jaoks)
* Port 664
* Port 832
* Port 1129
* Port 1184

### HSTS
HSTS (inglise k. HTTP *Strict Transport Security*) on poliitika (inglise k. *policy*), mida veebiserverid saavad rakendada ühenduse loomisel brauseriga (kliendiga), mis ei luba ühendust luua ühegi teise protokolliga peale HTTPS-i. Veebiserverid annavad brauserile HSTS poliitikast teada kasutades HTTP päisesõnumit (inglise k. HTTP *header*), mis sisaldab ühenduse loomiseks vajalikke spetsifikatsioone ning parameetreid, sh kui kaua brauser peaks poliitikat meeles hoidma (max-age) ning kas seda rakendatakse ka alamdomeenidele. Saadetava päisesõnumi näide:
```http
Strict-Transport-Security: max-age=31536000;
```


## Puudujäägid
HTTPS-protokoll on haavatav netiliikluse analüüsimise rünnakute suhtes (inglise k. *[[:en:Traffic_analysis|traffic analysis]] attack*). Sellise rünnaku käigus analüüsitakse veebiliiklust ning proovitakse nii kliendi kui ka veebilehe kommunikatsioonis leida mustreid, mille abil saaks dekrüpteerida liikuvat informatsiooni. Mustrite leidmise muudab võimalikuks asjaolu, et SSL/TLS muudab saadetava info sisu, kuid selle edastamise ajastust ega andmete suurust ei muudeta. 

Vahendajarünnete abil on võimalik kliendi ja serveri kommunikatsiooni vahelist SSL/TLS versiooni alandada (inglise k. *[[:en:Downgrade_attack|downgrade attack]]* või *SSL stripping*). Rünnaku käigus kasutatakse ära kätluse käigus saadetavat "*Client Hello Message*", kliendi poolt toetatud SSL/TLS protokolli versiooni deklaratsiooni, milles vahetatakse soovitud versioon aegunud variandi vastu ning selle käigus alandatakse HTTPS protokoll HTTP peale .

## Kasutus
Krüpteeritud ja turvalise andmeedastuse tõttu puutub HTTPS protokolliga kõige enam kokku erinevatesse veebikeskkondadesse sisselogimisel. Oluliste isikuandmete kaitsmiseks on HTTPS eriti vajalik panga- või terviseandmete sisestamisel, et vältida pealtkuulamist ja andmete potentsiaalset varastamist. Ilma turvalise ühenduseta on igasuguste andmete sisestamine veebilehele väga suur turvarisk.

* 2024. aasta andmetel möödub 93,2% Chrome'i kasutajate veebi sirvimise ajast HTTPS-lehtedel.
* 2020. aasta andmetel kasutab 79% Alexa top 100 000 populaarsematest veebilehtedest vaikeseadena HTTPS-protokolli.
* 2024. aasta andmetel kasutab 85,6% kõikidest veebilehtedest vaikeseadena HTTPS-protokolli.

## Vaata ka
* HTTP
* Transpordikihi turbeprotokoll
* Avaliku võtme taristu
* ID-kaart
* Avatud süsteemide sidumise arhitektuur
* SSL/TLS
* Vahendajarünne
* HSTS

## Viited