Passa al contenuto principale

RFC 2818 - HTTP Over TLS (HTTPS) - Esempi pratici

Esempi pratici​

Connessione HTTPS completa​

Operazioni del client:

1. Analizzare l'URI: https://www.example.com/page.html
→ Hostname: www.example.com
→ Porta: 443 (predefinita)

2. Connessione TCP a www.example.com:443

3. Handshake TLS:
ClientHello →
← ServerHello + Certificate
Verificare l'hostname nel certificato
...handshake completato...

4. Inviare richiesta HTTP crittografata:
GET /page.html HTTP/1.1
Host: www.example.com

5. Ricevere risposta HTTP crittografata:
HTTP/1.1 200 OK
Content-Length: 1234
...

6. Chiudere la connessione:
Inviare closure_alert
Chiudere la connessione TCP

Esempio di verifica del certificato​

# Esempio Python (concettuale)
import ssl
import socket

# Creare contesto SSL
context = ssl.create_default_context()

# Connettersi al server
sock = socket.create_connection(('www.example.com', 443))
ssock = context.wrap_socket(sock, server_hostname='www.example.com')

# wrap_socket verifica automaticamente:
# 1. La catena di certificati è valida
# 2. L'hostname corrisponde
# 3. Il certificato non è scaduto

# Ottenere informazioni sul certificato
cert = ssock.getpeercert()
print(f"Subject: {cert['subject']}")
print(f"Issuer: {cert['issuer']}")
print(f"SANs: {cert.get('subjectAltName', [])}")

Gestione degli errori comuni​

Errore 1: Mancata corrispondenza del nome host del certificato
Certificate Hostname Mismatch
- Certificato: *.example.com
- Accesso: www.different.com
→ Terminare la connessione o avvisare l'utente

Errore 2: Certificato scaduto
Certificate Expired
- Not After: 2023-12-31
- Corrente: 2024-01-01
→ Rifiutare la connessione

Errore 3: Certificato autofirmato
Self-Signed Certificate
- Non nell'elenco delle CA attendibili
→ Avvisare l'utente o rifiutare

Errore 4: Catena di certificati incompleta
Incomplete Certificate Chain
- Manca il certificato intermedio
→ Impossibile verificare, rifiutare la connessione