Most feltételezem, hogy elolvastad az előző bejegyzésemet arról, hogyan hozz létre saját aláírású tanúsítványokat a fejlesztéshez, és lehet, hogy azt gondoltad: “Jaj, nagyszerű! ….De hogyan használhatom őket valójában?”. Ez a blogbejegyzés lépésről lépésre végigvezeti Önt az IIS kézi konfigurálásának folyamatán a számítógépén vagy Windows szerverén, hogy használja a saját aláírású tanúsítványait az IIS ügyféltanúsítvány-társítási hitelesítéssel együtt.
Kérem, vegye figyelembe, hogy a példáimban a localhost tárhelyemet és egy véletlenszerű domain nevet használok, de ezt megteheti a valódi szervere IIS-én, ha rendelkezik statikus IP-címmel az internetszolgáltatójától vagy a domain hosting cégétől, valamint helyesen konfigurálta a tűzfalat, routerét stb., ahol végül a domain nevét erre a címre tudja irányítani. DE nem ajánlom egyiket sem a saját aláírású tanúsítványokkal együtt, hacsak az ügyfelei/felhasználói nem hajlandóak fogadni és telepíteni a saját aláírású gyökér- és ügyféltanúsítványt. Jó példa erre egy zárt intranet, ahol hozzáférése van az összes végfelhasználó számítógépéhez, mert akkor telepítheti a tanúsítványokat a gépeikre, ami szükséges, ha nem akarja, hogy a felhasználók egy nagy, kövér figyelmeztetést kapjanak a saját aláírású szervertanúsítványával kapcsolatos bizalmi problémákról. Ha kereskedelmi termelésre alkalmas megoldást keres, akkor az önaláírás helyett inkább vásárolja meg a tanúsítványait. Most, hogy ezt már tisztáztuk, egy PC-t használok Windows 8.1 Pro-val, IIS 8.5-tel és Visual Studio Premium 2013-mal. (Egy Windows Server 2012 R2 Hyper-V VM-mel is teszteltem a PC-n).
IIS telepítése
Ha még nem telepítette az IIS-t a gépre, amely a tárhelykiszolgálóként fog működni, akkor tegye ezt meg a PC Windows gombjának megnyomásával és a “Windows funkciók be- vagy kikapcsolása” kereséssel (vagy menjen a Vezérlőpultra és keressen rá). Ellenőrizze az Internet Information Services és a következő fiókcsomópontokat.
(Ha .NET 3.5 rendszert használ, akkor ellenőrizze a .NET Extensibility 3.5 és az ASP.NET 3.5)
Windows Server 2012 esetén lépjen a Kiszolgálókezelő műszerfalára ➜ Kattintson a Szerepek és funkciók hozzáadása gombra ➜ Válassza ki a szerepkör-alapú vagy a funkció-based installation (webkiszolgáló alapú telepítést), és menjünk tovább ➜ Válassza ki a kiszolgálót ➜ Engedélyezze a Webkiszolgáló (IIS) nevű kiszolgálói szerepet és a következő gyermekelemeket
Egyőződjön meg arról is, hogy az Alkalmazásfejlesztés van bejelölve a következő gyermekelemekkel
Kattintson az OK gombra, és engedje a Windows telepítését.
Mintaprojektünk létrehozása
A bemutató kedvéért létrehozunk egy nagyon egyszerű mini alkalmazást, amelyet a helyi IIS-ben fogunk hosztolni. (Az enyémet akár közvetlenül a Githubon is forkolhatod)
A Visual Studióban hozz létre egy új üres webalkalmazást és hivatkozzunk a web api
Nekünk csak egy nagyon egyszerű kontrollerre lesz szükségünk:
using System.Web.Http;namespace IISWithCertificatesSample.WebApi.Controllers{ public class CatsController : ApiController { public IHttpActionResult Get() { return Ok("A lot of cats meowing for food"); } }}
Most már képesnek kell lenned mindkét útvonalat futtatni (F5) és a /api/cats segítségével a localhost url-re szörfölni (az enyém így néz ki http://localhost:62172/api/cats). Félelmetes, hosztoljuk ezt az alkalmazást a helyi IIS segítségével.
MEGJEGYZÉS: Az alkalmazást már nem közvetlenül a Visual Studio-ból (F5) fogjuk futtatni, amely az IIS Express használatára van beállítva.
IIS konfigurálása
Nyissuk meg az IIS Manager-t (Windows gomb + keresés). Adjunk hozzá egy új weboldalt és alkalmazáskészletet a mintaalkalmazásunkkal. (Jobb klikk a Sites ➜ Add Website) Az elérési útvonalnak annak a mappának kell lennie, ahol a weboldalunk dokumentumai találhatók, tehát ha már publikáltuk a weboldalunkat, akkor az elérési útvonalat mutassuk oda. Én ehhez a nagyon egyszerű példához a Visual Studio-ban a projekt közvetlen elérési útvonalát fogom használni.
Most pedig helyileg hosztoljuk ezt a webhelyet a host név, azaz a domain neved megadásával.
Mivel csak lokálisan hosztolok, hozzá kell adnom a webhelyet a helyi hosts fájlomhoz, hogy a localhost IP-címemet a hostnévhez kössem. Ez úgy történik, hogy rendszergazdaként futtatom a notepad programot, és megnyitom a hosts fájlt a következő elérési útvonalon: %systemroot%\System32\drivers\etc
A végére a következőket adom hozzá: 127.0.0.1 yourdomain.com www.yourdomain.com
Most amikor a gépemen a yourdomain.com és a www.yourdomain.com oldalra szörfölök, az újonnan hozzáadott kötéseimmel a 127.0.0.1 IP címre (ami a localhost IP címe) fogja feloldani az oldalt.
Adjuk hozzá a www. kötést a webhelyünkhöz az IIS Managerben is
Surfeljünk a kötésekben beállított domain névre www-vel vagy www. nélkül, és adjuk hozzá a /api/cats végződését, és meg kell kapnunk a nyávogó macskákat. (Ha nem, próbáld meg kiüríteni a gyorsítótárat)
FONTOS: Ez CSAK a helyi gépen fog megtörténni, mert megváltoztattuk a hosts fájlt, hogy az általunk hozzáadott domain név kéréseit a localhost IP címre irányítsuk át. Ez fejlesztésre szolgál, és arra, hogy tesztelhessük a változtatásokat, mielőtt telepítjük őket a valódi webhosting szerverünkre.
A szerver biztosítása SSL-lel
Most szeretnénk biztosítani a macskákat egy SSL tanúsítvány hozzáadásával a szerverünkhöz.
Az IIS Managerben menjünk a szerverünkhöz (A fa tetején balra) ➜ Görgessünk lefelé, és kattintsunk duplán a Szerver tanúsítványokra.
(Ha a saját aláírású tanúsítványunk már itt van, ugorjunk előre a kötések lépéseihez)
A saját aláírású szervertanúsítványunkat importálnunk kell, hogy engedélyezzük a https kommunikációt SSL-lel, ezért kattintsunk az Importálás…
Kattintsunk a … és keressük meg a .pfx fájlt, töltse ki a jelszót (a parancskötegfájljában a -po paramétert) és kattintson az OK-ra
A tanúsítványa most hozzáadva
Dupla kattintás az újonnan hozzáadott certre, hogy ellenőrizze, megbízható-e (A saját aláírású tanúsítványai az előző bejegyzésemben a megfelelő tárolókba kerültek, tehát még egyszer: olvasd el, ha most eltévedtél ;-))
So messze, olyan jó! Most már hozzáadhatjuk a https kötést, ugyanúgy, mint korábban, de válasszuk a https-t a 443-as porttal, a domainünket hostnévként, és keressük meg a saját aláírású tanúsítványunkat a legördülő listában
Pipáljuk be a Server Name Indication négyzetet, ami lehetővé teszi, hogy a szerverünk több tanúsítványt is telepítsen ugyanazon IP címre azáltal, hogy az SSL handshake első szakaszában a hostnevet is elküldi. Ismételje meg ugyanezeket a lépéseket a www.yourdomain SSL hozzáadásához.com, de olyan tanúsítvánnyal, ahol a CN név megegyezik a tartománynévvel, vagy egy wildcard tanúsítvánnyal
A kötéseink egyelőre befejeződtek
Tadaa, most már használhatja https://yourdomain.com/api/cats és https://www.yourdomain.com/api/cats
JEGYZET: A Firefox nem használja a Windows tanúsítványtárát, ezért kézzel kell hozzáadni a gyökér hitelesítésszolgáltatót. Menj a Firefox Beállítások ➜ Beállítások ➜ Speciális ➜ Tanúsítványok megtekintése ➜ Hatóságok ➜ CARoot.cer fájl importálása
IIS Client Certificate Mapping Authentication
Most már végigmentünk a gyökér és kiszolgáló tanúsítványok használatán, és valószínűleg kíváncsiak vagytok, hogy mit kezdjetek az előző bejegyzésemben szintén létrehozott ügyféltanúsítvánnyal. Ez olyan helyzetekre vonatkozik, amikor például a kliensek hitelesítésére van szükségünk felhasználói bejelentkezés és jelszó megközelítés nélkül, hanem inkább azt szeretnénk, ha a kiszolgáló megkérné a klienst, hogy mutassa meg a tanúsítványát, és ha ez a megfelelő, akkor a kliens beléphet. Ez történhet sok-az-egyhez vagy egy-az-egyhez hozzárendeléssel, és megmutatom, hogyan lehet mindkettőt manuálisan elvégezni az IIS Managerben.
Először is telepítenünk kell a funkciót, ezért hozzuk elő újra a “Windows funkciók be- vagy kikapcsolása” menüpontot, és telepítsük a következőt
Megmondjuk a szervernek, hogy SSL tanúsítványt kérjen az ügyféltől
Ezután be kell állítanunk a szervert, hogy tudja, melyik kliens tanúsítványát kell érvényesítenie, ezért menjünk a Konfigurációs szerkesztőbe, és válasszuk az iisClientCertificateMappingAuthentication részt (megadhatjuk a rendszer elérési útvonalát is.webServer/security/authentication/iisClientCertificateMappingAuthentication a Section mezőbe)
Many-To-One Mappings
Ha több ügyféltanúsítványt szeretne egyetlen felhasználóhoz rendelni, akkor erre a megközelítésre van szükség. A kliens tanúsítványokat is megoszthatjuk így, ha a kliens tanúsítványt (és a CA Root-t, mivel önaláíró tanúsítványról van szó) telepítjük más felhasználókra, bármelyik gépen is legyen a hozzáférés, amennyiben a kliens tanúsítvány megfelel a leképezés szabálykritériumainak. Ez például olyan helyzetben lenne hasznos, amikor azt szeretnénk, hogy egy szervezet összes felhasználója egyetlen felhasználói leképezésen keresztül kapjon hozzáférést.
Enable the client certificate mapping authentication
To add a mapping click the … of the manyToOneMappings
Here you add the users that you want to get access.
Töltse ki a leképezés tulajdonságait, és ismételje meg ezt minden olyan felhasználó esetében, akinek hozzáférést vagy megtagadást kíván beállítani. Ne feledje, hogy minden felhasználó mmc-jére telepíteni kell az ügyféltanúsítványt és a root CA tanúsítványt.
FONTOS: Ahhoz, hogy ez működjön, meg kell adnia egy érvényes felhasználónevet és jelszót, és mivel az én számítógépem a szerver, a hitelesítő adatok a Windows felhasználónevem és jelszavam lesznek.
Most létre kell hoznunk néhány szabályt ehhez a leképezéshez, hogy a szerver meg tudja határozni, hogy egy ügyfél beléphet-e vagy sem. Ez egy tehát kattintsunk a rules tulajdonságra és a … gombra
Egy szabályt fogok hozzáadni példaként, ahol a kiszolgáló ellenőrzi az ügyfél tanúsítványát, hogy a megfelelő CA gyökér aláírta-e azt. Folytassa és adjon hozzá több szabályt a nagyobb biztonság érdekében, további dokumentációért látogasson el az IIS Many-To-One Mapping hivatkozásra.
Ne feledje, hogy a módosításokat az IIS Managerben kell alkalmazni, ezért zárja be a szabályok és a leképezések ablakát, és kattintson az Alkalmazás gombra
Nyisson egy új inkognitó böngészőablakot, hogy biztosan tiszta lappal induljon a cache és a cookie-k tekintetében, és adja meg az url-t a /api/cats-sel, és lássa, hogy a böngésző kéri a tanúsítványt. Válassza ki a ClientCertet és kattintson az ok-ra, hogy hozzáférjen a macskákhoz.
Ha ez nem működik, győződjön meg róla, hogy a kliens tanúsítványa a CurrentUser/Personal tárolóban és a böngésző tanúsítványtárolójában is megtalálható. Ha igen, akkor lépjen a Vezérlőpult ➜ Internetes beállítások ➜ Tartalom és kattintson az SSL állapot törlése gombra.
Nyisson egy új inkognitó ablakot és próbálja meg újra, a böngészőnek most már kérnie kell az ügyféltanúsítványt.
MEGJEGYZÉS: Ne feledje, ahogy korábban már elmagyaráztam, a Firefoxnak saját tanúsítványtárolója van, ezért a használatához importálnia kell az ügyféltanúsítványt a “Saját tanúsítványai”-ba.
Egy-az-egyhez megfeleltetések
Megnézzük az egy-az-egyhez megfeleltetéseket is. Ez a megközelítés azt jelenti, hogy minden egyes felhasználói leképezéshez egyedi ügyféltanúsítványra van szükségünk. Vagy letiltjuk a sok-az-egyhez leképezést, és ugyanazt a tanúsítványt és felhasználót használjuk, vagy újakat hozunk létre. Menjünk vissza a Konfigurációs szerkesztőbe, és nyissuk meg újra az iisClientCertificateMappingAuthentication részt. Kattintson a … a oneToOneMappings elemre.
A tanúsítványhoz való hozzárendeléshez exportálnunk kell az ügyféltanúsítvány fájl nyilvános kulcsát. Ezt a gépkezelő konzolból exportálhatjuk (nyomjuk meg a Windows gombot és keressük meg az mmc-t) Snap-in a Local Machine’s Certificate’s personal store és exportáljuk a használni kívánt kliens ssl tanúsítványt a privát kulcs nélkül base64 formátumban.
Jobb egérgombbal kattintson az újonnan exportált tanúsítványra, és nyissa meg a jegyzettömbbel. Magából a tanúsítványból távolítsa el az összes sortörést.
Majd másolja be ezt a leképezés tanúsítványtulajdonság mezőjébe, és töltse ki a többit
FONTOS: Ahhoz, hogy ez működjön, meg kell adnia egy érvényes felhasználónevet és jelszót, és mivel az én gépem a szerver, a hitelesítő adatok Windows felhasználónév és jelszó lesznek.
Még egyszer ne felejtse el alkalmazni a módosításokat.
És tessék, próbálja ki, és amikor a rendszer kéri, válassza ki a tanúsítványt, amit az imént hozzárendelt a felhasználóhoz.
Remélem, hasznosnak találta ezt a bejegyzést, a következő bejegyzésemben pedig azt fogom végigvenni, hogyan lehet saját aláírású tanúsítványokat használni a Windows Azure-ral együtt, és hogyan lehet az IIS-t C# kóddal konfigurálni, nézze meg itt: 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 =)