Junior
Pověz mi o protokolu HTTPS.
sobes.tech AI
Odpověď od AI
HTTPS (Hypertext Transfer Protocol Secure) je rozšíření protokolu HTTP, které zajišťuje zabezpečený přenos dat mezi klientem (prohlížečem) a serverem.
Hlavní rozdíly a principy fungování HTTP:
- Šifrování: Používá protokoly SSL/TLS k zašifrování dat, chrání je před zachycením a změnou.
- Integrita: Zaručuje, že data odeslaná klientem dorazí na server beze změn.
- Autentifikace: Umožňuje klientovi ověřit pravost serveru, ujistit se, že komunikuje s požadovaným zdrojem.
Fáze navázání zabezpečeného spojení:
- Client Hello: Klient odešle serveru seznam podporovaných verzí SSL/TLS, algoritmů šifrování a dalších parametrů.
- Server Hello: Server vybere z navržených parametrů ty nejvhodnější a odešle je zpět spolu se svým certifikátem.
- Certificate Verify: Klient ověří certifikát serveru (autenticita, platnost, řetězec důvěry).
- Client Key Exchange: Klient vygeneruje tajný klíč relace, zašifruje ho veřejným klíčem serveru (z certifikátu) a odešle.
- Server Change Cipher Spec, Finished: Server dešifruje tajný klíč, spustí šifrování relace a potvrdí, že je připraven na výměnu zašifrovaných dat.
- Client Change Cipher Spec, Finished: Klient také spustí šifrování relace a potvrdí, že je připraven.
- Zabezpečená výměna dat: Další výměna dat probíhá pomocí symetrického šifrování na základě tajného klíče relace.
HTTPS je povinný pro webové stránky pracující s důvěrnými informacemi (přihlašovací údaje, hesla, bankovní údaje) a je důležitým faktorem SEO. Při testování HTTPS je důležité ověřit:
- Platnost a správnost SSL certifikátu.
- Podporu moderních verzí TLS.
- Přítomnost zranitelností (například Heartbleed, POODLE).
- Správné přesměrování z HTTP na HTTPS.
- Míšený obsah (kdy jsou na HTTPS stránce načítány zdroje přes HTTP).
Pro testování se používají nástroje jako Postman, curl, OpenSSL a vývojářské nástroje prohlížeče.
# Kontrola SSL certifikátu pomocí OpenSSL
openssl s_client -connect example.com:443
# Příklad HTTPS požadavku pomocí Python requests
import requests
try:
response = requests.get("https://example.com")
response.raise_for_status() # Kontrola chyb HTTP
print("Úspěšné připojení přes HTTPS.")
except requests.exceptions.RequestException as e:
print(f"Chyba při připojení přes HTTPS: {e}")