Junior
Räägi mulle HTTPS protokollist.
sobes.tech AI
Vastus AI-lt
HTTPS (Hypertext Transfer Protocol Secure) on HTTP protokolli laiendus, mis tagab turvalise andmeedastuse kliendi (brauseri) ja serveri vahel:
Peamised erinevused ja tööpõhimõtted HTTP:
- Krüpteerimine: Kasutab SSL/TLS protokolle andmete krüpteerimiseks, kaitstes neid pealtkuulamise ja muutmise eest.
- Terviklikkus: Tagab, et kliendilt saadetud andmed jõuavad serverini muutumatuna.
- Autentimine: võimaldab kliendil kontrollida serveri autentsust, veendumaks, et ta suhtleb õige ressursiga.
Turvalise ühenduse loomise etapid:
- Client Hello: Klient saadab serverile nimekirja toetatud SSL/TLS versioonidest, krüpteerimisalgoritmidest ja muudest parameetritest.
- Server Hello: Server valib sobivaimad parameetrid ning saadab need tagasi, samuti oma sertifikaadi.
- Certificate Verify: Klient kontrollib serveri sertifikaati (autentsus, kehtivusaeg, usaldusketi).
- Client Key Exchange: Klient genereerib sessiooni salajase võtme, krüpteerib selle serveri avaliku võtmega (sertifikaadist) ja saadab serverile.
- Server Change Cipher Spec, Finished: Server dekrüpteerib salajase võtme, alustab sessiooni krüpteerimist ning kinnitab valmisolekut andmete vahetamiseks.
- Client Change Cipher Spec, Finished: Klient samuti alustab sessiooni krüpteerimist ning kinnitab valmisolekut.
- Turvaline andmevahetus: Edasine andmevahetus toimub simmetrilise krüpteerimisega, kasutades sessiooni salajast võtit.
HTTPS on kohustuslik konfidentsiaalse info (logid, paroolid, panganduse andmed) töötlemiseks ning oluline SEO faktor. HTTPS-i testimisel tuleb kontrollida:
- SSL sertifikaadi kehtivust ja õigsust.
- Tänapäevaste TLS versioonide toetust.
- Nõrkade kohtade olemasolu (nt Heartbleed, POODLE).
- Õige suunamise HTTP-st HTTPS-ile.
- Segatud sisu (kui HTTPS-le laaditakse HTTP ressursse).
Tööriistad: Postman, curl, OpenSSL, brauseri arendustööriistad.
# SSL sertifikaadi kontroll OpenSSL-iga
openssl s_client -connect example.com:443
# HTTPS päring Python requests-iga
import requests
try:
response = requests.get("https://example.com")
response.raise_for_status() # HTTP vigade kontroll
print("HTTPS ühendus edukas")
except requests.exceptions.RequestException as e:
print(f"Viga HTTPS-ühenduses: {e}")