Non tutti sanno che IIS (Internet Information Services), il webserver di Microsoft, offre la possibilità di effettuare mutua autenticazione usando certificati SSL.
Probabilmente avrete visto che, all’interno della configurazione SSL di un sito, è possibile richiedere un certificato SSL client a chi effettua la connessione:
in questo caso IIS verifica soltanto che il certificato presentato sia valido, ovvero firmato da una CA trusted.
La mutua autenticazione consente di fare un passo in più: in base al certificato che il client manda ad IIS avviene un mapping su un utente (locale o di dominio). E’ quindi possibile identificare un utente senza richiedere username e password, ma basandosi sul certificato che questo possiede.
IIS consente due diversi mapping: one-to-one (ad ogni certificato corrisponde un preciso utente) o many-to-one (a più certificati corrisponde un solo utente). Nel primo caso dovremo caricare in IIS l’intero certificato, mentre nel secondo indicheremo ad IIS le caratteristiche che i diversi certificati dovranno avere (ad esempio il valore di CN):
Configurazione
La configurazione della funzionalità di Certificate Mapping non può essere fatta da interfaccia grafica (IIS Manager); è possibile solo modificando direttamente la configurazione di IIS.
Per prima cosa verifichiamo che sul server siano installati i seguenti role services:
il primo (Client Certificate Mapping) serve per effettuare il mapping su account di dominio (Active Directory), mentre il secondo (IIS Client Certificate Mapping) per il mapping su account locali.
Apriamo quindi l’editor di configurazione del sito scelto:
La configurazione dei due moduli di autenticazione si trova sotto security – authentication:
Vediamo ad esempio il mapping su account locali. Per prima cosa dobbiamo abilitare il modulo e scegliere se attivare il mapping one-to-one o many-to-one (possiamo usarli anche entrambi):
Per inserire un one-to-one mapping, clicchiamo su …:
quindi clicchiamo Add e inseriamo le informazioni richieste (certificato, username e password):
Il certificato deve essere fornito in formato base64, rimuovendo le righe —BEGIN CERTIFICATE— e —END CERTIFICATE— e i caratteri di a capo in modo che sia tutto su una sola riga:
Per un many-to-one mapping i passi sono simili… invece che caricare il certificato andremo a definire una o più rules. Se il certificato presentato soddisferà una rule, il mapping verrà realizzato:
Ricordiamoci infine di disattivare gli altri metodi di autenticazione:
Ciao, complimenti per la ottima guida. Ho un dubbio, però: cosa sono le username e password da inserire nella configurazione del mapping? Cioè, la premessa che fai all’inizio è “E’ quindi possibile identificare un utente senza richiedere username e password, ma basandosi sul certificato che questo possiede.”. Quindi a che servono username e password? Grazie.
Ciao Roberto! Una volta autenticato tramite certificato, chi si collega deve “impersonare” un utente di sistema (ad esempio per poter accedere ai files del server…). E’ quello il motivo per cui devi associare il certificato (= la chiave di accesso) ad un utente (e relativa password) locale o di Active Directory.