Digest access authentication: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
template citazione; rinomina/fix nomi parametri; converto template cite xxx -> cita xxx; fix formato data |
Nessun oggetto della modifica Etichette: Link a wikipedia.org Aggiunta di indirizzo e-mail Modifica visuale: commutato |
||
Riga 100:
Questi protocolli cleartext meno robusti usati insieme alla criptazione di rete HTTPS sono una soluzione per molte minaccie per cui digest access authentication è stato progettato. Però questo uso di HTTPS conta sul fatto che il client validi l'URL al quale sta accedendo per non mandare la password ad un server non affidabile, che potrebbe risultare in un attacco Phishing. L'utente, però, spesso non lo fa, perciò il [[phishing]] è diventato la falla nella sicurezza più comune.
== Esempio ==
Il seguente esempio è stato originalmente proposto nel RFC 2617, qui è stato esteso per mostrare le [[Hypertext_Transfer_Protocol#Messaggio_di_richiesta|richieste]] e le [[Hypertext_Transfer_Protocol#Messaggio_di_risposta|risposte]] attese. Da tenere presente che qui si tratta del solo codice quality of protection "auth" (autenticazione) - dal aprile 2005, solo [[Opera (browser)|Opera]] e [[Konqueror]] sopportano "auth-int" (autenticazione con protezione dell'integrità). Sebbene l'esempio accenna la versione HTTP 1.1, lo schema può essere aggiunto a un server che utilizza la versione 1.0, come mostrato qui.
Questa tipica transazione consiste dei seguenti passi:
# Il client chiede una pagina che richiede un'autenticazione, però non fornisce un username e una password. Tipicamente succede, perchè l'utente ha inserito l'indirizzo oppure ha seguito un link alla pagina.
# Il server risponde col codice [[Codici_di_stato_HTTP#401_Unauthorized|401 "Unauthorized"]], fornendo un realm di autenticazione e un valore mono uso, generato casualmente, cioè la [[nonce]].
# A questo punto, il browser presenta il realm di autenticazione (tipicamente una descrizione del computer oppure del sistema al quale si sta accedendo) all'utente e richiede un username e una password. Ora l'utente può decidere di cancellare la transazione.
# Una volta forniti l'username e la password, il client rimanda la stessa richiesta aggiungendo il header d'autenticazione che include il codice di risposta.
# In questo esempio, il server accetta l'autenticazione e risponde con la pagina richiesta. Se le credenziali fornite sono invalidi o sbagliati il server potrebbe rispondere con il codice "401"e si ritorna al punto 3.
----
; Richiesta del client (senza autenticazione):
<source lang="http">
GET /dir/index.html HTTP/1.0
Host: localhost
</source>
; Risposta del server:
<source lang="http">
HTTP/1.0 401 Unauthorized
Server: HTTPd/0.9
Date: Sun, 10 Apr 2014 20:26:47 GMT
WWW-Authenticate: Digest realm="testrealm@host.com",
qop="auth,auth-int",
nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093",
opaque="5ccc069c403ebaf9f0171e9517f40e41"
Content-Type: text/html
Content-Length: 153
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>Error</title>
</head>
<body>
<h1>401 Unauthorized.</h1>
</body>
</html>
</source>
; Richiesta del client (username "Mufasa", password "Circle Of Life"):
<source lang="http">
GET /dir/index.html HTTP/1.0
Host: localhost
Authorization: Digest username="Mufasa",
realm="testrealm@host.com",
nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093",
uri="/dir/index.html",
qop=auth,
nc=00000001,
cnonce="0a4f113b",
response="6629fae49393a05397450978507c4ef1",
opaque="5ccc069c403ebaf9f0171e9517f40e41"
</source>
(followed by a blank line, as before).
; Risposta del server:
<source lang="http">
HTTP/1.0 200 OK
Server: HTTPd/0.9
Date: Sun, 10 Apr 2005 20:27:03 GMT
Content-Type: text/html
Content-Length: 7984
</source>
----
Il valore della risposta è calcolato in tre passi (dove i valori vengono combinati essi sono delimitati da due punti).
# La hash MD5 del realm, username e password viene calcolata. Il risultato è HA1.
# La hash MD5 del metodo e digest [[Uniform Resource Identifier]] viene calcolata (ad esempio "GET" e "/dir/index.html"). Il risultato è HA2.
# Viene calcolalta la hash MD5 di HA1, server nonce (nonce), request counter (nc), client nonce (cnonce), quality of protection code (qop) e HA2. Il risultato è il valore della risposta fornito dal client.
Siccome il server ha le stesse informazioni che ha il client, la risposta può essere verificata eseguendo gli stessi calcoli. Nell'esempio prima il risultato è formato nel ssguente modo, dove <code>MD5()</code> rappresenta una funzione usata per il calcolo della hash [[MD5]], i backslash (\) rappresentano una continuazione e le citazioni mostrate non sono usate nei calcoli.
Ogni passaggio ha i seguenti risultati nell'esempio:
HA1 = MD5( "Mufasa:testrealm@host.com:Circle Of Life" )
= 939e7578ed9e3c518a452acee763bce9
HA2 = MD5( "GET:/dir/index.html" )
= 39aff3a2bab6126f332b942af96d3366
Risposta = MD5( "939e7578ed9e3c518a452acee763bce9:\
dcd98b7102dd2f0e8b11d0f600bfb0c093:\
00000001:0a4f113b:auth:\
39aff3a2bab6126f332b942af96d3366" )
= 6629fae49393a05397450978507c4ef1
A questo punto il client può mandare un'altra richiesta, riutilizzando il valore della nonce del server (il server fornisce una nonce nuova per ogni [[Codici_di_stato_HTTP#401_Unauthorized|risposta 401]]), però fornendo una nuova client nonce (cnonce).Per le richieste successive, il valore [[contatore]] [[Sistema numerico esadecimale|esadecimale]] di richieste (nc) deve essere maggiore dell'ultimo valore usato-altrimenti un attaccante potrebbe [[replay attack|ripetere]] una vecchia richiesta con le stesse credenziali. Sta al server assicurarsi che il valore del contatore incrementa ogni volta che fornisce un valore nonce nuovo, rifiutando le richieste sbagliate. Ovviamente cambiando il metodo, URI oppure il valore del contatore risulterà in un valore di risposta diverso.
Il server deve memorizzare i valori nonce che ha recentemente generato. Potrebbe inoltre memorizzare quando ha fornito i valori nonce, faccendogli scadere dopo una quantità di tempo. Se viene usato un valore scaduto, il server dovrebbe rispondere con [[Codici_di_stato_HTTP#401_Unauthorized|"401"]] ed aggiungere <code>stale=TRUE</code> al header di autenticazione, indicando che il client deve fare una nuova richiesta con la nuova nonce, senza richiedere l'username e password all'utente.
Il server non deve conservare i valori nonce-può semplicemente assumere che qualunque valore sconosciuto sia scaduto. Non sarà possibile far scadere il server nonce immediatamente, siccome il client non riuscirebbe ad usare la nonce.
== Il file .htdigest ==
.htdigest è un [[flat file]] usato per la memorizzazione degli username, realm e password per la digest authentication gli [[Apache HTTP Server]]. Il nome del file è passato alla configurazione [https://en.wikipedia.org/wiki/.htaccess .htaccess], e può essere chiamato con altri nome, però ".htdigest" è il nome più comune. Il nome comincia con un punto, perchè la maggior parte dei sistemi operativi [[Unix-like]] considerano ogni file che contiene un punto all'inizio del proprio nome come un file nascosto. Questo file è aggiornato con il commando "htdigest" della [[Shell (informatica)|shell]] che può aggiungere e aggiornare gli utenti e codifica le password per l'utilizzo.
Il commando "htdigest" si trova nel package '''apache2-utils''' contenuto nei sistemi [[dpkg]] e in '''httpd-tools''' contenuto nei sistemi [[RPM Package Manager]].
La sintassi del commando htdigest è la seguente:<ref name="htdigest">{{cite web|url=http://httpd.apache.org/docs/2.2/programs/htdigest.html|title=htdigest - manage user files for digest authentication|work=apache.org}}</ref>
htdigest [ -c ] ''passwdfile realm username''
Il formato del file .htdigest è il seguente:<ref name="htdigest">{{cite web|url=http://httpd.apache.org/docs/2.2/programs/htdigest.html|title=htdigest - manage user files for digest authentication|work=apache.org}}</ref>
user1:Realm:5ea41921c65387d904834f8403185412
user2:Realm:734418f1e487083dc153890208b79379
== SIP digest authentication ==
[[Session Initiation Protocol]] (SIP) usa praticamente lo stesso algoritmo di digest authentication. E' specificato nel RFC 3261.
== Browser supportati ==
Digest access authentication è implementato dalla maggior parte dei browser, alcune implementazioni contengono delle caratteristiche, ad esempio il controllo auth-int o l'algoritmo MD5-sess. Se il server obbliga l'utilizzo di queste caratteristiche facoltative, alcuni client potrebbero non riuscire a connettersi.
* [[Amaya]]
* Basati su [[Gecko (layout engine)|Gecko]]: (non includono auth-int<ref>{{cite web
| url = https://bugzilla.mozilla.org/show_bug.cgi?id=168942
| title = Bug 168942 - Digest authentication with integrity protection
| date = 2002-09-16
| author = Emanuel Corthay
| work = [[Mozilla]]
}}</ref>)
** [[Mozilla Application Suite]]
** [[Mozilla Firefox]]
** [[Netscape Navigator|Netscape 7+]]
* [[ICab|iCab 3.0.3+]]
* Basati su [[KHTML]]- e[[WebKit]]: (non includono auth-int<ref>{{cite web
|url=https://secure.vsecurity.com/download/papers/HTTPDigestIntegrity.pdf
|title=HTTP Digest Integrity: Another look, in light of recent attacks
|author=Timothy D. Morgan
|date=2010-01-05
|publisher=vsecurity.com
|deadurl=yes
|archiveurl=https://web.archive.org/web/20140714192236/https://secure.vsecurity.com/download/papers/HTTPDigestIntegrity.pdf
|archivedate=2014-07-14
|df=
}}</ref>)
** [[iCab]] 4
** [[Konqueror]]
** [[Google Chrome]]
** [[Safari (browser)|Safari]]
* Basati su [[Tasman (motore di rendering)|Tasman]]:
** [[Internet Explorer Macintosh Edition]]
* Basati su [[Trident (motore di rendering)|Trident]]:
** [[Internet Explorer 5|Internet Explorer 5+]]<ref>{{cite web
| url = https://technet.microsoft.com/en-us/library/cc738318(v=ws.10).aspx
| title = TechNet Digest Authentication
| date = August 2013
}}</ref> (non includono auth-int)
* Basati su [[Presto (motore di rendering)|Presto]]:
** [[Opera (web browser)|Opera]]
** [[Opera Mobile]]
** [[Opera Mini]]
** [https://en.wikipedia.org/wiki/Nintendo_DS_%26_DSi_Browser Nintendo DS Browser]
** [[Nokia 770]] Browser
** [https://en.wikipedia.org/wiki/Mylo_(Sony) Sony Mylo] Browser
** [https://en.wikipedia.org/wiki/Internet_Channel Wii Internet Channel Browser]
== Note ==
{{Reflist|group=note}}
|