Konfigurera IIS för att använda dina självsignerade certifikat i din applikation, inklusive autentisering av IIS-klientcertifikatmappning – blogg.

, Author

Jag antar nu att du har läst mitt tidigare inlägg om hur man skapar självsignerade certifikat för utveckling och att du kanske har tänkt ”Yay great! ….Men hur använder jag dem egentligen?”. Det här blogginlägget kommer att ta dig steg för steg genom den manuella processen för att konfigurera IIS på din PC eller Windows Server för att använda dina självsignerade certifikat tillsammans med IIS-klientcertifikatmappningsautentisering.

Bemärk att jag i mina exempel använder mitt localhost-hosting och ett slumpmässigt domännamn, men du kan göra detta på din riktiga servers IIS om du har en statisk IP-adress från din internetleverantör eller ditt domänhostingföretag och har konfigurerat din brandvägg, router etc. på rätt sätt, där du till slut kan peka ditt domännamn till din adress. MEN jag rekommenderar ingendera tillsammans med självsignerade certifikat om inte dina kunder/användare är villiga att ta emot och installera ditt självsignerade rot- och klientcertifikat. Ett bra exempel på detta är i ett slutet intranät där du har tillgång till alla slutanvändarnas datorer eftersom du då kan installera certifikaten på deras maskiner, vilket är nödvändigt om du inte vill att dina användare ska få en stor fet varning om förtroendeproblem med ditt självsignerade servercertifikat. Om du letar efter en kommersiell produktionsduglig lösning bör du köpa dina certifikat i stället för att självsignera. Nu när vi har fått det ur vägen använder jag en dator med Windows 8.1 Pro, IIS 8.5 och Visual Studio Premium 2013. (Jag har också testat med en Windows Server 2012 R2 Hyper-V VM på min dator).

Installation av IIS
Om du inte redan har installerat IIS på den maskin som ska fungera som värdserver gör du det genom att trycka på Windows-knappen för en dator och söka efter ”Turn Windows features on or off” (eller gå till Kontrollpanelen och söka). Kontrollera Internet Information Services och följande underordnade noder. 1 komplett IIS-installation
(Om du använder .NET 3.5 måste du kontrollera .NET Extensibility 3.5 och ASP.NET 3.5)

För Windows Server 2012 gå till Server Manager Dashboard ➜ Klicka på Lägg till roller och funktioner ➜ Välj rollbaserad eller funktionsbaserad.baserad installation och gå vidare ➜ Välj server ➜ Aktivera serverrollen som heter Web Server (IIS) och följande underordnade element Server IIS

Se också till att Application Development är markerad med följande underordnade element Server IIS application dev

Klicka på OK och låt Windows installera.

Skapa vårt exempelprojekt
För den här demonstrationens skull skapar vi ett riktigt enkelt miniprogram som vi kommer att vara värd för i den lokala IIS. (Du kan också bara gaffa min direkt på Github)

I Visual Studio skapar du en ny tom webbapplikation och refererar till web api 5 New Project

Vi behöver bara en reeeeeeelt enkel controller:

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

Du bör nu kunna köra båda vägarna (F5) och surfa till localhost url med /api/cats (min ser ut som http://localhost:62172/api/cats). Fantastiskt, låt oss vara värd för den här applikationen med hjälp av vår lokala IIS.

OBS: Vi kommer inte längre att köra applikationen direkt från Visual Studio (F5) som är inställd på att använda IIS Express.

Konfigurera IIS
Öppna din IIS-hanterare (Windows-knapp + sök efter den). Lägg till en ny webbplats och applikationspool med vår exempelapplikation. (Högerklicka på Webbplatser ➜ Lägg till webbplats) Sökvägen måste vara den mapp där dina webbplatsdokument finns, så om du har publicerat din webbplats pekar du sökvägen dit. Jag kommer bara att använda den direkta sökvägen till projektet i Visual Studio för det här mycket enkla exemplet.

Nu ska vi vara lokal värd för den här webbplatsen genom att ange värdnamnet AKA. ditt domännamn. 7 yourdomain.com

Då jag bara är värd lokalt måste jag lägga till webbplatsen i min lokala hosts-fil för att binda min IP-adress till localhost med värdnamnet. Detta görs genom att köra notepad som administratör och öppna hosts-filen i sökvägen: %systemroot%\System32\drivers\etc hosts file

Anslutningsvis lägger du till följande: %systemroot%\System32\drivers\etc hosts file

: 127.0.0.0.1 yourdomain.com www.yourdomain.com 8 hosts file

När jag nu surfar till yourdomain.com och www.yourdomain.com på min maskin kommer webbplatsen att lösas upp med mina nyss tillagda bindningar till IP-adressen 127.0.0.0.1 (som är localhosts IP-adress).

Vi lägger till www. bindning till din webbplats i IIS Manager också 9 IIS bindningar 10 lägg till http-bindning 11 domän med www12 både http tillagd

Surfa till domännamnet som du har ställt in i bindningarna med eller utan www. och lägg till ändelsen /api/cats och du bör få de mjauande katterna. (Om inte, försök att tömma cacheminnet)

VIKTIGT: Detta kommer ENDAST att hända på den lokala maskinen eftersom vi ändrade hosts-filen så att våra förfrågningar från domännamnet som vi lagt till omdirigeras till IP-adressen localhost. Den är avsedd för utveckling och för att kunna testa dina ändringar innan du distribuerar dem till din riktiga webbhotellsserver.

Säkra servern med SSL
Nu vill vi säkra katterna genom att lägga till ett SSL-certifikat till vår server.
I I din IIS-hanterare går du till din server (högst upp i trädet till vänster) ➜ Rulla ner och dubbelklicka på Servercertifikat. 13 IIS Server

(Om ditt självsignerade certifikat redan finns här kan du hoppa vidare till stegen för bindningar)

Vi måste importera vårt självsignerade servercertifikat för att aktivera https-kommunikation med SSL, så klicka på Importera… 14 Importera servercertifikat

Klicka på … och leta upp din .pfx-filen, fyll i lösenordet (parametern -po i din kommandobatchfil) och klicka på OK 15 Browse server cert

Ditt certifikat har nu lagts till 16 cert added

Du dubbelklickar på det nyss tillagda certifikatet för att verifiera att det är betrodd (Dina egenhändigt signerade certifikat lades till i rätt butiker i mitt tidigare inlägg, så igen: Läs det om du är vilse just nu ;-))

17 trusted server cert

Så långt, så bra! Nu kan vi lägga till https-bindningen, på samma sätt som tidigare men välj https med port 443, din domän som värdnamn och hitta ditt självsignerade certifikat i rullgardinslistan

18 bindningar lägg till ssl

Kryssa i rutan Server Name Indication vilket gör att vår server kan ha flera certifikat installerade på samma IP-adress genom att skicka värdnamnet med det första steget i SSL-handskakningen. Upprepa samma steg för att lägga till SSL för www.yourdomain.com men med ett certifikat där CN-namnet matchar domännamnet eller ett wildcard-certifikat
19 https www with wildcard

Våra bindningar är klara för tillfället

19 Alla bindningar

Tadaa, du kan nu använda https://yourdomain.com/api/cats och https://www.yourdomain.com/api/cats

NOTAT: Firefox använder inte Windows certifikatarkiv, så du måste lägga till din rotcertifikatutfärdare manuellt. Gå till Firefox Inställningar ➜ Alternativ ➜ Avancerat ➜ Visa certifikat ➜ Myndigheter ➜ importera din CARoot.cer-fil

IIS Client Certificate Mapping Authentication
Vi har nu gått igenom användningsområdena för rot- och servercertifikaten och du undrar antagligen vad du ska göra med klientcertifikatet som vi också skapade i mitt tidigare inlägg. Detta är för situationer när vi till exempel behöver autentisera klienter utan användarinloggning och lösenord utan snarare vill att servern ska be klienten att visa sitt certifikat och om det är rätt certifikat tillåts klienten komma in. Detta kan göras med en många-till-en- eller en en-till-en-mappning och jag kommer att visa hur man gör båda manuellt i IIS Manager.

Först måste vi installera funktionen, så ta upp ”Turn Windows features on or off” igen och installera följande 20 IIS client cert mapping

Vi kommer att tala om för vår server att den ska kräva ett SSL-certifikat från klienten 21 SSL Settings 22 apply require ssl

Därefter måste vi konfigurera servern så att den vet vilket klientcertifikat som den måste validera, så gå till Configuration Editor och välj avsnittet iisClientCertificateMappingAuthentication (du kan också ange sökvägen system.webServer/security/authentication/iisClientCertificateMappingAuthentication i fältet Section) 24 iisClientCertMapAuth-sektionen

Many-To-One Mappings
Om du vill mappa flera klientcertifikat till en enskild användare är detta tillvägagångssätt vad du behöver. Du kan också dela klientcertifikat på det här sättet genom att installera klientcertifikatet (och CA Root, eftersom det är ett självsignerat certifikat) på andra användare på vilken maskin som helst för att få åtkomst så länge klientcertifikatet matchar regelkriterierna för mappningen. Det skulle till exempel vara användbart i en situation där du vill att alla användare i en organisation ska få åtkomst via en enda användarmappning.

Aktivera autentisering av mappning av klientcertifikat 25 enable client auth

För att lägga till en mappning klickar du på … i manyToOneMappings 26 add mapping

Här lägger du till användarna som du vill ge tillgång.27 add new mapping

Fyller ut egenskaperna för en mappning och upprepar för varje användare som du vill konfigurera för åtkomst eller nekande. Kom ihåg att du behöver klientcertifikatet och root CA-certifikatet installerat på alla användares mmc.
28 manytoone mapping

VIKTIGT: För att det här ska fungera måste du ange ett giltigt användarnamn och lösenord och eftersom min dator är servern kommer autentiseringsuppgifterna att vara mitt Windows-användarnamn och lösenord.

Nu måste vi skapa några regler för att följa med den här mappningen så att servern kan avgöra om en klient får tillträde eller inte. Det är en så klicka på rules property och knappen …

29 add rule

Jag kommer att lägga till en regel som ett exempel där servern kommer att kontrollera klientcertifikatet för att se om det är signerat av rätt CA root. Gå vidare och lägg till fler regler för mer säkerhet, besök referensen IIS Many-To-One Mapping för mer dokumentation.
31 regel

Håll ihåg att tillämpa ändringarna i IIS-hanteraren, så stäng fönstren för regler och mappningar och klicka på Tillämpa 32 Tillämpa ändringar

Öppna ett nytt inkognitobrowserfönster för att vara säker på att du startar från ett rent bord cache- och cookie-mässigt, och skriv in din webbadress med /api/cats och se webbläsaren som frågar dig efter ett certifikat. Välj ClientCert och klicka ok för att få tillgång till katterna. 33 ok client cert

Om detta inte fungerar ska du se till att ditt klientcertifikat finns i ditt CurrentUser/Personal-arkiv samt i webbläsarens certifikatarkiv. Om ja, gå till Kontrollpanelen ➜ Internetalternativ ➜ Innehåll och klicka på Rensa SSL-status. 34 clear ssl state

Öppna ett nytt inkognitofönster och försök igen, din webbläsare bör nu be dig om klientcertifikatet.

OBS: Kom ihåg som jag förklarade tidigare att Firefox har ett eget certifikatarkiv så du måste importera klientcertifikatet till ”Dina certifikat” för att kunna använda det här.

Ett-till-ett-till-ett-tillhörigheter
Låt oss gå igenom även de en-till-ett-tillhörigheterna. Detta tillvägagångssätt innebär att vi behöver ett individuellt klientcertifikat för varje användarmappning. Du kan antingen inaktivera många-till-en-mappningen och använda samma certifikat och användare eller skapa nya. Gå tillbaka till Configuration Editor och öppna avsnittet iisClientCertificateMappingAuthentication igen. Klicka på … för oneToOneMappings. 35 enable one to one mappings

För att lägga till mappningen till certifikatet måste vi exportera den offentliga nyckeln i klientcertifikatfilen. Du kan exportera detta från din maskinhanteringskonsol (tryck på Windows-knappen och sök efter mmc) Snappa in i den lokala maskinens certifikats personliga lager och exportera klientens ssl-certifikat som du vill använda utan den privata nyckeln i base64-formatet. Export client cert Medoug private key base64 export

Högerklicka på det nyexporterade certifikatet och öppna med notepad. Ta bort alla radbrytningar i själva certifikatet. Remove linebreaks

Kopiera det nu in i certifikatets egenskapsfält i mappningen och fyll i resten 38 add user mapping

VIKTIGT: För att det här ska fungera måste du ange ett giltigt användarnamn och lösenord och eftersom min dator är servern kommer inloggningsuppgifterna att vara ett Windows-användarnamn och -lösenord.

Tillbaka till det, kom ihåg att tillämpa ändringarna. 39 apply changes

Och där har du det, prova det och när du blir tillfrågad välj certifikatet du mappade till användaren du just mappade.

Jag hoppas att du tyckte att det här inlägget var användbart och i mitt nästa inlägg kommer jag att gå igenom hur man använder självsignerade certifikat tillsammans med Windows Azure och hur man konfigurerar IIS med hjälp av C#-kod, ta en titt på det här: 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/

Have a good one =)

Lämna ett svar

Din e-postadress kommer inte publiceras.