RFC 2617 - Autenticazione HTTP: Autenticazione di accesso di base e digest
Data di pubblicazione: Giugno 1999
Stato: Standard Internet
Autori: J. Franks, P. Hallam-Baker, J. Hostetler, S. Lawrence, P. Leach, A. Luotonen, L. Stewart
Rende obsoleto: RFC 2069
Reso obsoleto da: RFC 7235, RFC 7615, RFC 7616, RFC 7617
Sommario (Abstract)
"HTTP/1.0" include la specifica per uno schema di autenticazione di accesso di base (Basic Access Authentication Scheme). Questo schema non è considerato un metodo sicuro di autenticazione degli utenti (a meno che non venga utilizzato in combinazione con qualche sistema sicuro esterno come SSL), poiché il nome utente e la password vengono trasmessi sulla rete in chiaro.
Questo documento fornisce anche la specifica per il framework di autenticazione (Authentication Framework) HTTP, lo schema di autenticazione di base originale e uno schema basato su hash crittografici, denominato "Autenticazione di accesso digest" (Digest Access Authentication). Pertanto, è anche destinato a servire come sostituto per RFC 2069. Alcuni elementi opzionali specificati da RFC 2069 sono stati rimossi da questa specifica a causa di problemi riscontrati dopo la sua pubblicazione; altri nuovi elementi sono stati aggiunti per compatibilità, questi nuovi elementi sono stati resi opzionali, ma sono fortemente raccomandati.
Come l'autenticazione di base (Basic), l'autenticazione di accesso digest (Digest Access Authentication) verifica che entrambe le parti di una comunicazione conoscano un segreto condiviso (una password); a differenza dell'autenticazione di base, questa verifica può essere effettuata senza inviare la password in chiaro, che è la più grande debolezza dell'autenticazione di base. Come per la maggior parte degli altri protocolli di autenticazione, le maggiori fonti di rischio si trovano solitamente non nel protocollo principale stesso, ma nelle politiche e procedure che ne circondano l'uso.
Stato di questo documento (Status of this Memo)
Questo documento specifica un protocollo standard Internet per la comunità Internet e richiede discussioni e suggerimenti per miglioramenti. Si prega di fare riferimento all'edizione corrente degli "Internet Official Protocol Standards" (STD 1) per lo stato di standardizzazione e lo status di questo protocollo. La distribuzione di questo documento è illimitata.
Indice (Table of Contents)
- 1. Autenticazione di accesso (Access Authentication)
- 1.1 Dipendenza dalla specifica HTTP/1.1
- 1.2 Framework di autenticazione di accesso
- 2. Schema di autenticazione di base (Basic Authentication Scheme)
- 3. Schema di autenticazione di accesso digest (Digest Access Authentication Scheme)
- 3.1 Introduzione
- 3.1.1 Scopo
- 3.1.2 Operazione complessiva
- 3.1.3 Rappresentazione dei valori digest
- 3.1.4 Limitazioni
- 3.2 Specifica degli header digest
- 3.2.1 L'header di risposta WWW-Authenticate
- 3.2.2 L'header di richiesta Authorization
- 3.2.3 L'header Authentication-Info
- 3.3 Operazione digest
- 3.4 Negoziazione del protocollo di sicurezza
- 3.5 Esempio
- 3.6 Proxy-Authentication e Proxy-Authorization
- 3.1 Introduzione
- 4. Considerazioni sulla sicurezza (Security Considerations)
- 4.1 Autenticazione dei client utilizzando l'autenticazione di base
- 4.2 Autenticazione dei client utilizzando l'autenticazione digest
- 4.3 Valori nonce ad uso limitato
- 4.4 Confronto tra digest e autenticazione di base
- 4.5 Attacchi replay
- 4.6 Debolezza creata da più schemi di autenticazione
- 4.7 Attacchi con dizionario online
- 4.8 Man in the Middle
- 4.9 Attacchi chosen plaintext
- 4.10 Attacchi con dizionario precalcolato
- 4.11 Attacchi brute force batch
- 4.12 Spoofing da server contraffatti
- 4.13 Memorizzazione delle password
- 4.14 Riepilogo
- 5. Implementazione di esempio (Sample implementation)
- 6. Ringraziamenti (Acknowledgments)
- 7. Riferimenti (References)
- 8. Indirizzi degli autori (Authors' Addresses)
Concetti fondamentali
Due schemi di autenticazione
1. Autenticazione di base (Basic Authentication)
- Principio: Nome utente e password inviati codificati in Base64
- Formato:
Authorization: Basic base64(username:password) - Sicurezza: ⚠️ Trasmissione in chiaro, non sicura (a meno di usare HTTPS)
- Casi d'uso: Applicazioni semplici, sistemi interni, combinato con HTTPS
2. Autenticazione digest (Digest Authentication)
- Principio: Utilizza hash MD5, la password non viene trasmessa in chiaro
- Formato: Include nonce, realm, qop e altri parametri
- Sicurezza: ✅ Più sicuro dell'autenticazione di base, ma HTTPS comunque raccomandato
- Casi d'uso: Autenticazione HTTP che richiede maggiore sicurezza
Flusso di autenticazione
Client Server
| |
|------- 1. Richiesta risorsa -------->|
| protetta |
| |
|<------ 2. 401 + WWW-Authenticate ----|
| (sfida) |
| |
|------- 3. Header Authorization ----->|
| (credenziali) |
| |
|<------ 4. 200 OK + risorsa ----------|
| |
Codici di stato HTTP
- 401 Unauthorized: Autenticazione richiesta
- 407 Proxy Authentication Required: Autenticazione proxy richiesta
Header HTTP principali
WWW-Authenticate: Sfida inviata dal serverAuthorization: Credenziali inviate dal clientAuthentication-Info: Informazioni di autenticazione opzionaliProxy-Authenticate: Sfida dal server proxyProxy-Authorization: Credenziali inviate al proxy
Esempi
Esempio di autenticazione di base
Risposta del server:
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Basic realm="WallyWorld"
Richiesta del client:
GET /private/index.html HTTP/1.1
Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
Esempio di autenticazione digest
Risposta del server:
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Digest
realm="[email protected]",
qop="auth,auth-int",
nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093",
opaque="5ccc069c403ebaf9f0171e9517f40e41"
Richiesta del client:
GET /dir/index.html HTTP/1.1
Authorization: Digest username="Mufasa",
realm="[email protected]",
nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093",
uri="/dir/index.html",
qop=auth,
nc=00000001,
cnonce="0a4f113b",
response="6629fae49393a05397450978507c4ef1",
opaque="5ccc069c403ebaf9f0171e9517f40e41"
Risorse correlate
- Testo ufficiale: RFC 2617 (TXT)
- Pagina ufficiale: RFC 2617 DataTracker
- Rende obsoleto: RFC 2069
- Reso obsoleto da:
- RFC 7235 (HTTP/1.1 Authentication)
- RFC 7615 (HTTP Authentication-Info)
- RFC 7616 (HTTP Digest Access Authentication)
- RFC 7617 (HTTP Basic Authentication)
Avviso di sicurezza ⚠️
- L'autenticazione di base non è sicura: deve essere utilizzata con HTTPS
- L'autenticazione digest ha limitazioni: sebbene migliore dell'autenticazione di base, HTTPS è comunque raccomandato
- Alternative moderne: considerare l'uso di OAuth 2.0, JWT o altri meccanismi di autenticazione moderni
- Memorizzazione delle password: i server dovrebbero memorizzare le password utilizzando hash salati
Avviso importante: RFC 2617 è stato reso obsoleto da RFC 7235, 7616, 7617 e altri. Le applicazioni moderne dovrebbero fare riferimento a questi standard aggiornati, o utilizzare framework di autenticazione moderni come OAuth 2.0.