Configura IIS per usare i tuoi certificati autofirmati con la tua applicazione, inclusa l’autenticazione di mappatura dei certificati client di IIS – blog.

, Author

Presumo che abbiate letto il mio post precedente su come creare certificati autofirmati per lo sviluppo e potrebbe avervi fatto pensare “Sì, fantastico! ….Ma come li uso veramente?”. Questo post del blog vi condurrà passo dopo passo attraverso il processo manuale di configurazione di IIS sul vostro PC o Server Windows per utilizzare i vostri certificati autofirmati insieme all’autenticazione di mappatura dei certificati client di IIS.

Si prega di notare che nei miei esempi uso il mio hosting localhost e un nome di dominio casuale ma potete fare questo sul vostro server reale IIS se avete un indirizzo IP statico dal vostro provider di servizi internet o dalla vostra società di hosting del dominio così come configurato il vostro firewall, router ecc. correttamente dove finalmente potete puntare il vostro nome di dominio al vostro indirizzo. MA non raccomando nessuno dei due insieme ai certificati autofirmati a meno che i tuoi clienti/utenti non siano disposti a ricevere e installare il tuo certificato root e client autofirmato. Un buon esempio di questo è in una intranet chiusa dove avete accesso a tutti i computer degli utenti finali perché allora potete installare i certificati sulle loro macchine, il che è necessario se non volete che i vostri utenti ricevano un grosso avvertimento sui problemi di fiducia con il vostro certificato server autofirmato. Se state cercando una soluzione commerciale degna della produzione, dovreste acquistare i vostri certificati invece di autofirmarli. Quindi, ora che ci siamo tolti il pensiero, sto usando un PC con Windows 8.1 Pro, IIS 8.5 e Visual Studio Premium 2013. (Ho anche testato con una VM di Windows Server 2012 R2 Hyper-V sul mio PC).

Installazione di IIS
Se non hai ancora installato IIS sulla macchina che fungerà da server di hosting, fallo premendo il pulsante Windows di un PC e cerca “Attiva o disattiva le funzioni di Windows” (o vai al Pannello di controllo e cerca). Controlla Internet Information Services e i seguenti childnodes. 1 installazione completa di IIS
(Se stai usando .NET 3.5 devi controllare la .NET Extensibility 3.5 e ASP.NET 3.5)

Per Windows Server 2012 vai su Server Manager Dashboard ➜ Fai clic su aggiungi ruoli e funzionalità ➜ Scegli l’installazione basata sui ruoli o sulle funzionalità e vai avanti ➜.e vai avanti ➜ Seleziona il server ➜ Abilita il ruolo del server chiamato Web Server (IIS) e i seguenti elementi figlio Server IIS

Assicurati anche che Sviluppo Applicazioni sia selezionato con i seguenti childnodes Server IIS application dev

Clicca OK e lascia che Windows installi.

Creazione del nostro progetto di esempio
Per lo scopo di questa demo creeremo una mini applicazione molto semplice che ospiteremo nell’IIS locale. (Puoi anche fare un fork del mio direttamente su Github)

In Visual Studio, crea una nuova applicazione web vuota e fai riferimento a web api 5 New Project

Abbiamo solo bisogno di un controller molto semplice:

using System.Web.Http;namespace IISWithCertificatesSample.WebApi.Controllers{ public class CatsController : ApiController { public IHttpActionResult Get() { return Ok("A lot of cats meowing for food"); } }}

Ora dovresti essere in grado di eseguire entrambe le route (F5) e navigare verso l’url localhost con /api/cats (il mio sembra http://localhost:62172/api/cats). Fantastico, ospitiamo questa applicazione usando il nostro IIS locale.

NOTA: Non eseguiremo più l’applicazione direttamente da Visual Studio (F5) che è impostato per usare IIS Express.

Configurazione di IIS
Apri il tuo IIS Manager (pulsante Windows + ricerca). Aggiungi un nuovo sito web e un pool di applicazioni con la nostra applicazione di esempio. (Clicca con il tasto destro del mouse su Sites ➜ Add Website) Il percorso deve essere la cartella dove si trovano i documenti del tuo sito web, quindi se hai pubblicato il tuo sito web punta il percorso lì. Userò solo il percorso diretto al progetto in Visual Studio per questo esempio molto semplice.

Ora ospitiamo localmente questo sito specificando il nome host AKA. il tuo nome di dominio. 7 yourdomain.com

Siccome sto solo ospitando localmente ho bisogno di aggiungere il sito al mio file hosts locale per legare il mio indirizzo IP localhost con il nome host. Questo viene fatto eseguendo notepad come amministratore e aprendo il file hosts nel percorso: %systemroot%\System32\drivers\etc file hosts

aggiungendo il seguente alla fine: 127.0.0.1 yourdomain.com www.yourdomain.com 8 file hosts

Ora ogni volta che navigo su yourdomain.com e www.yourdomain.com sulla mia macchina risolverà il sito con i miei nuovi binding aggiunti all’indirizzo IP 127.0.0.1 (che è l’IP di localhost).

Aggiungiamo il www. al tuo sito in IIS Manager 9 IIS bindings 10 add http binding 11 domain with www12 both http added

Surf al nome del dominio che hai impostato nei bindings con o senza www. e aggiungi il finale /api/cats e dovresti ottenere il miagolio dei gatti. (Se no provate a svuotare la cache)

IMPORTANTE: Questo accadrà SOLO sulla macchina locale perché abbiamo alterato il file hosts per reindirizzare le nostre richieste del nome di dominio che abbiamo aggiunto all’indirizzo IP localhost. È pensato per lo sviluppo e per essere in grado di testare le tue modifiche prima di distribuirle al tuo vero server di web hosting.

Proteggere il server con SSL
Ora vogliamo proteggere i gatti aggiungendo un certificato SSL al nostro server.
Nel tuo IIS Manager vai al tuo server (in cima all’albero a sinistra) ➜ Scorri in basso e fai doppio clic su Server Certificates. 13 IIS Server

(Se il tuo certificato autofirmato è già qui, salta avanti ai passi dei binding)

Dobbiamo importare il nostro certificato server autofirmato per abilitare la comunicazione https con SSL, quindi clicca su Import… 14 Import server cert

Clicca su … e trova il tuo file .pfx, compila la password (il parametro -po nel tuo file batch di comando) e clicca OK 15 browse server cert

Il tuo certificato è ora aggiunto 16 cert aggiunto

Doppio clic sul cert appena aggiunto per verificare che sia affidabile (i tuoi certificati autofirmati sono stati aggiunti agli archivi corretti nel mio post precedente, quindi ancora: leggilo se ti sei perso in questo momento ;-))

17 trusted server cert

Fin qui tutto bene! Ora possiamo aggiungere il binding https, allo stesso modo di prima ma scegliendo https con la porta 443, il tuo dominio come nome dell’host e trovando il tuo certificato autofirmato nell’elenco a discesa

18 bindings add ssl

Seleziona la casella Server Name Indication che permette al nostro server di avere più certificati installati sullo stesso indirizzo IP inviando l’hostname con la prima fase dell’handshake SSL. Ripetete gli stessi passi per aggiungere SSL per www.yourdomain.com ma con un certificato dove il nome CN corrisponde al nome del dominio o un certificato jolly
19 https www con jolly

I nostri binding sono completi per ora

19 Tutti i binding

Tadaa, ora puoi usare https://yourdomain.com/api/cats e https://www.yourdomain.com/api/cats

NOTE: Firefox non usa il negozio di certificati di Windows, quindi dovrai aggiungere la tua CA radice manualmente. Vai su Firefox Settings ➜ Options ➜ Advanced ➜ View Certificates ➜ Authorities ➜ import your CARoot.cer file

IIS Client Certificate Mapping Authentication
Ora abbiamo visto gli usi dei certificati root e server e probabilmente ti stai chiedendo cosa fare con il certificato client che abbiamo creato nel mio post precedente. Questo è per le situazioni in cui, per esempio, abbiamo bisogno di autenticare i client senza un approccio basato su login e password, ma piuttosto vogliamo che il server chieda al client di mostrare il suo certificato e se è quello corretto il client può entrare. Questo può essere fatto con una mappatura Many-To-One o One-To-One e vi mostrerò come fare entrambe manualmente in IIS Manager.

Prima abbiamo bisogno di installare la funzione, quindi porta di nuovo su “Attiva o disattiva le funzioni di Windows” e installa quanto segue 20 IIS client cert mapping

Diremo al nostro server di richiedere un certificato SSL dal client 21 SSL Settings 22 apply require ssl

Poi dobbiamo configurare il server per sapere quale certificato client deve convalidare, quindi vai nell’Editor di Configurazione e scegli la sezione iisClientCertificateMappingAuthentication (puoi anche inserire il percorso system.webServer/security/authentication/iisClientCertificateMappingAuthentication nel campo Section) 24 sezione iisClientCertMapAuth

Many-To-One Mappings
Se vuoi mappare più certificati client ad un singolo utente questo approccio è quello che ti serve. Puoi anche condividere i certificati client in questo modo, installando il certificato client (e la CA Root, dato che siamo un certificato autofirmato) su altri utenti su qualsiasi macchina per ottenere l’accesso, purché il certificato client corrisponda ai criteri delle regole della mappatura. Sarebbe utile, per esempio, in una situazione in cui si desidera che tutti gli utenti di un’organizzazione ottengano l’accesso attraverso una singola mappatura utente.

Abilita l’autenticazione della mappatura del certificato client 25 abilita il client auth

Per aggiungere una mappatura clicca su … delle molteToOneMappings 26 aggiungi mappatura

Qui aggiungi gli utenti a cui vuoi garantire l’accesso.27 add new mapping

Ricompilate le proprietà di un mapping e ripetete per ogni utente che volete configurare per l’accesso o il rifiuto. Ricorda che hai bisogno del certificato client e del certificato CA root installati su tutti i mmc dell’utente.
28 manytoone mapping

IMPORTANTE: Per far sì che questo funzioni devi inserire un nome utente e una password validi e poiché il mio computer è il server, le credenziali saranno il mio nome utente e la mia password di Windows.

Ora abbiamo bisogno di creare alcune regole per andare con questo mapping così il server può determinare se un client è ammesso o no. È un clic sulla proprietà rules e sul pulsante …

29 add rule

Aggiungerò una regola come esempio dove il server controllerà il certificato del client per vedere se è firmato dalla CA root corretta. Andate avanti e aggiungete altre regole per maggiore sicurezza, visitate il riferimento IIS Many-To-One Mapping per ulteriore documentazione.
31 rule

Ricordati di applicare le modifiche in IIS Manager, quindi chiudi le finestre delle regole e delle mappature e clicca su Apply 32 apply changes

Apri una nuova finestra del browser in incognito per essere sicuro di partire da zero per quanto riguarda cache e cookie ed inserisci il tuo url con /api/cats e vedi il browser che ti chiede un certificato. Scegliete il ClientCert e cliccate su ok per avere accesso ai gatti. 33 ok client cert

Se questo non funziona assicurati che il tuo certificato client sia nel tuo negozio CurrentUser/Personal così come nel negozio dei certificati del tuo browser. Se sì, vai in Pannello di controllo ➜ Opzioni Internet ➜ Contenuto e clicca su Cancella stato SSL. 34 cancella stato ssl

Apri una nuova finestra in incognito e riprova, il tuo browser dovrebbe ora chiederti il certificato del client.

NOTA: Ricorda come ho spiegato prima, Firefox ha il suo proprio negozio di certificati quindi devi importare il certificato del client in “I tuoi certificati” per poterlo usare.

Mappature one-to-one
Passiamo anche per le mappature one-to-one. Questo approccio significa che abbiamo bisogno di un certificato client individuale per ogni mappatura utente. Puoi disabilitare la mappatura molti-a-uno e usare lo stesso certificato e lo stesso utente o crearne di nuovi. Torna all’editor di configurazione e apri di nuovo la sezione iisClientCertificateMappingAuthentication. Fate clic su … delle oneToOneMappings. 35 abilita le mappature one to one

Per aggiungere la mappatura al certificato dobbiamo esportare la chiave pubblica del file del certificato client. Puoi esportarlo dalla tua Machine Management Console (premi il pulsante Windows e cerca mmc) Fai uno snap-in nel negozio personale del certificato della macchina locale ed esporta il certificato ssl del client che vuoi usare senza la chiave privata nel formato base64. Esporta certificato client Con chiave privata esportazione base64

Clicca con il tasto destro sul certificato appena esportato e aprilo con il blocco note. Rimuovi tutte le interruzioni di linea nel certificato stesso. Rimuovi le interruzioni di linea

Ora copialo nel campo delle proprietà del certificato della mappatura e compila il resto 38 aggiungi mappatura utente

IMPORTANTE: Affinché questo funzioni devi inserire un nome utente e una password validi e poiché il mio computer è il server, le credenziali saranno un nome utente e una password di Windows.

Ricordati di applicare le modifiche. 39 applica le modifiche

Ecco fatto, prova e quando ti viene richiesto scegli il certificato che hai mappato all’utente che hai appena mappato.

Spero che tu abbia trovato utile questo post e per il mio prossimo post andrò a vedere come usare i certificati autofirmati insieme a Windows Azure e come configurare IIS tramite codice C#, dai un’occhiata qui: http://blog.jayway.com/2015/04/21/configure-a-windows-azure-cloud-service-to-use-your-self-signed-certificates-for-iis-client-certificate-mapping-authentication/

Buona giornata =)

.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.