Předpokládám, že jste nyní četli můj předchozí příspěvek o tom, jak vytvořit vlastnoručně podepsané certifikáty pro vývoj, a možná jste si v něm řekli: „Hurá, skvělé! ….Ale jak je mám vlastně použít?“. Tento příspěvek na blogu vás krok za krokem provede ručním procesem konfigurace služby IIS na vašem počítači nebo serveru se systémem Windows, abyste mohli používat své vlastnoručně podepsané certifikáty spolu s ověřováním mapováním klientských certifikátů služby IIS.
Upozorňuji, že ve svých příkladech používám svůj hosting localhost a náhodné doménové jméno, ale můžete to udělat i na skutečném serveru IIS, pokud máte statickou IP adresu od poskytovatele internetových služeb nebo společnosti poskytující hosting domény a také správně nakonfigurovanou bránu firewall, směrovač atd., kde nakonec můžete na tuto adresu nasměrovat své doménové jméno. ALE nedoporučuji ani jedno, ani druhé společně s vlastnoručně podepsanými certifikáty, pokud vaši klienti/uživatelé nejsou ochotni přijímat a instalovat váš vlastnoručně podepsaný kořenový a klientský certifikát. Dobrým příkladem je uzavřená intranetová síť, kde máte přístup ke všem počítačům koncových uživatelů, protože pak můžete certifikáty nainstalovat na jejich počítače, což je nezbytné, pokud nechcete, aby vaši uživatelé dostali velké tučné varování o problémech s důvěryhodností vašeho vlastnoručně podepsaného serverového certifikátu. Pokud hledáte řešení vhodné pro komerční produkci, měli byste si certifikáty místo vlastního podepisování zakoupit. Tak a teď to máme za sebou, používám počítač s Windows 8.1 Pro, IIS 8.5 a Visual Studio Premium 2013. (Testoval jsem také s virtuálním počítačem Hyper-V se systémem Windows Server 2012 R2 na mém PC).
Instalace IIS
Pokud jste ještě nenainstalovali IIS na počítači, který bude fungovat jako hostitelský server, udělejte to stisknutím tlačítka Windows pro PC a vyhledáním „Zapnout nebo vypnout funkce systému Windows“ (nebo přejděte do Ovládacích panelů a vyhledejte). Zkontrolujte Internetovou informační službu a následující podřízené uzly.
(Pokud používáte systém .NET 3.5, musíte zkontrolovat rozšíření .NET 3.5 a ASP.NET 3.5)
V případě systému Windows Server 2012 přejděte na ovládací panel Správce serveru ➜ klepněte na tlačítko přidat role a funkce ➜ vyberte možnost role nebo funkce.založené na funkcích a přejděte k dalšímu kroku ➜ Vyberte server ➜ Povolte roli serveru s názvem Webový server (IIS) a následující podřízené prvky
Také se ujistěte, že je zaškrtnuta volba Vývoj aplikací s následujícími podřízenými prvky
Klikněte na OK a nechte systém Windows nainstalovat.
Vytvoření našeho ukázkového projektu
Pro účely této ukázky vytvoříme opravdu jednoduchou miniaplikaci, kterou budeme hostovat v lokálním IIS. (Můžete také jen forknout můj přímo na Githubu)
V aplikaci Visual Studio vytvořte novou prázdnou webovou aplikaci a odkaz na web api
Budeme potřebovat jen reeeealně jednoduchý kontrolér:
using System.Web.Http;namespace IISWithCertificatesSample.WebApi.Controllers{ public class CatsController : ApiController { public IHttpActionResult Get() { return Ok("A lot of cats meowing for food"); } }}
Nyní byste měli být schopni spustit obě trasy (F5) a surfovat na url localhostu pomocí /api/cats (můj vypadá jako http://localhost:62172/api/cats). Paráda, pojďme tuto aplikaci hostovat pomocí našeho lokálního IIS.
POZNÁMKA: Aplikaci již nebudeme spouštět přímo z Visual Studia (F5), které je nastaveno na použití IIS Express.
Konfigurace IIS
Otevřete Správce IIS (tlačítko Windows + vyhledávání). Přidejte novou webovou stránku a fond aplikací s naší ukázkovou aplikací. (Klepněte pravým tlačítkem myši na Webové stránky ➜ Přidat webovou stránku) Cesta musí být ve složce, kde jsou umístěny dokumenty vašeho webu, takže pokud jste webovou stránku publikovali, nasměrujte cestu tam. Pro tento velmi jednoduchý příklad použiji pouze přímou cestu k projektu ve Visual Studiu.
Nyní pojďme tento web lokálně hostovat zadáním názvu hostitele AKA. název vaší domény.
Protože budu hostovat pouze lokálně, musím web přidat do svého místního souboru hosts, aby se IP adresa localhostu svázala s názvem hostitele. To provedu tak, že spustím Poznámkový blok jako správce a otevřu soubor hosts v cestě: %systemroot%\System32\drivers\etc
Na konec přidám následující text: 127.0.0.1 yourdomain.com www.yourdomain.com
Nyní, kdykoli budu surfovat na yourdomain.com a www.yourdomain.com na svém počítači, bude stránka s nově přidanými vazbami přeložena na IP adresu 127.0.0.1 (což je IP adresa localhostu).
Přidáme www. Vazba na váš web také ve Správci IIS
Surfujte na název domény, který jste nastavili ve vazbách s nebo bez www. a přidejte koncovku /api/cats a měli byste dostat mňoukající kočky. (Pokud ne, zkuste vyprázdnit mezipaměť)
DŮLEŽITÉ: Toto se bude dít POUZE na místním počítači, protože jsme změnili soubor hosts, aby přesměroval naše požadavky přidaného doménového jména na IP adresu localhostu. Je to určeno pro vývoj a pro možnost otestování změn před jejich nasazením na skutečný webhostingový server.
Zabezpečení serveru pomocí SSL
Nyní chceme zabezpečit kočky přidáním certifikátu SSL na náš server.
Ve Správci IIS přejděte na svůj server (Horní část stromu vlevo) ➜ Přejděte dolů a poklepejte na položku Certifikáty serveru.
(Pokud je zde již váš vlastnoručně podepsaný certifikát, přeskočte dopředu na kroky týkající se vazeb)
Potřebujeme importovat náš vlastnoručně podepsaný certifikát serveru, abychom umožnili komunikaci https s protokolem SSL, proto klikněte na tlačítko Importovat…
Klikněte na … a najděte svůj .pfx, vyplňte heslo (parametr -po v dávkovém souboru příkazu) a klikněte na tlačítko OK
Váš certifikát je nyní přidán
Dvakrát klikněte na nově přidaný cert a ověřte, zda je důvěryhodný (Vaše vlastnoručně podepsané certifikáty byly přidány do správných úložišť v mém předchozím příspěvku, takže ještě jednou: Přečtěte si ho, pokud jste se právě ztratili ;-))
Tak zatím je to dobré! Nyní můžeme přidat vazbu https, stejným způsobem jako předtím, ale zvolíme https s portem 443, vaši doménu jako název hostitele a v rozevíracím seznamu najdeme váš vlastnoručně podepsaný certifikát
Zaškrtněte políčko Server Name Indication, které umožní našemu serveru mít nainstalováno více certifikátů na stejné IP adrese tím, že v první fázi SSL handshake pošle název hostitele. Stejné kroky zopakujte pro přidání SSL pro www.yourdomain.com, ale s certifikátem, kde se název CN shoduje s názvem domény, nebo s certifikátem se zástupným znakem
Naše vazby jsou prozatím kompletní
Tadaa, nyní můžete použít https://yourdomain.com/api/cats a https://www.yourdomain.com/api/cats
POZN: Firefox nepoužívá úložiště certifikátů systému Windows, takže kořenovou certifikační autoritu budete muset přidat ručně. Přejděte do Nastavení Firefoxu ➜ Možnosti ➜ Upřesnit ➜ Zobrazit certifikáty ➜ Autority ➜ importovat váš soubor CARoot.cer
Ověřování mapováním klientských certifikátů IIS
Tímto jsme prošli použití kořenového certifikátu a serverového certifikátu a pravděpodobně vás zajímá, co dělat s klientským certifikátem, který jsme také vytvořili v mém předchozím příspěvku. Ten je určen pro situace, kdy například potřebujeme ověřit klienty bez přístupu pomocí přihlašovacího jména a hesla, ale spíše chceme, aby server požádal klienta o předložení jeho certifikátu, a pokud je správný, klient bude vpuštěn. To lze provést pomocí mapování Many-To-One nebo One-To-One a já vám ukážu, jak obojí provést ručně ve Správci IIS.
Nejprve musíme tuto funkci nainstalovat, takže znovu vyvolejte „Zapnout nebo vypnout funkce systému Windows“ a nainstalujte následující
Přikážeme našemu serveru, aby vyžadoval od klienta certifikát SSL
Poté musíme nakonfigurovat server, aby věděl, který klientský certifikát má ověřit, proto přejděte do Editoru konfigurace a vyberte sekci iisClientCertificateMappingAuthentication (můžete také zadat cestu system.webServer/security/authentication/iisClientCertificateMappingAuthentication do pole Section)
Many-To-One Mappings
Pokud chcete mapovat více klientských certifikátů na jednoho uživatele, je tento přístup to, co potřebujete. Takto můžete také sdílet klientské certifikáty tak, že klientský certifikát (a kořenovou certifikační autoritu, protože se jedná o self-signing certifikát) nainstalujete ostatním uživatelům na libovolném počítači, aby získali přístup, pokud klientský certifikát odpovídá kritériím pravidel mapování. Hodilo by se to například v situaci, kdy byste chtěli, aby všichni uživatelé v organizaci získali přístup prostřednictvím jediného mapování uživatelů.
Povolte ověřování mapování klientských certifikátů
Pro přidání mapování klikněte na … z manyToOneMappings
Tady přidáte uživatele, kterým chcete udělit přístup.
Vlastnosti mapování vyplňte a opakujte pro každého uživatele, kterému chcete nastavit přístup nebo odepřít přístup. Nezapomeňte, že na mmc všech uživatelů musíte mít nainstalovaný klientský certifikát a certifikát kořenové certifikační autority.
DŮLEŽITÉ: Aby to fungovalo, musíte zadat platné uživatelské jméno a heslo, a protože můj počítač je server, přihlašovací údaje budou moje uživatelské jméno a heslo Windows.
Nyní musíme vytvořit nějaká pravidla, která budou s tímto mapováním souviset, aby server mohl určit, zda je klientovi povolen přístup, nebo ne. Je to tak klikněte na vlastnost rules a tlačítko …
Jako příklad přidám jedno pravidlo, kde server zkontroluje klientský certifikát, zda je podepsán správnou kořenovou certifikační autoritou. Pokračujte v přidávání dalších pravidel pro větší bezpečnost, další dokumentaci naleznete v referenci Mapování IIS Many-To-One.
Nezapomeňte aplikovat změny ve Správci IIS, takže zavřete okna s pravidly a mapováním a klikněte na Použít
Otevřete nové okno prohlížeče inkognito, abyste se ujistili, že začínáte s čistým štítem, pokud jde o mezipaměť a soubory cookie, a zadejte url adresu s /api/cats a zobrazte výzvu prohlížeče k zadání certifikátu. Vyberte ClientCert a klikněte na ok, abyste získali přístup ke kočkám.
Pokud to nefunguje, ujistěte se, že je váš klientský certifikát v úložišti CurrentUser/Personal i v úložišti certifikátů prohlížeče. Pokud ano, přejděte do Ovládacích panelů ➜ Možnosti internetu ➜ Obsah a klikněte na Vymazat stav SSL.
Otevřete nové inkognito okno a zkuste to znovu, prohlížeč by vás nyní měl vyzvat k zadání klientského certifikátu.
POZNÁMKA: Nezapomeňte, že jak jsem již vysvětlil dříve, Firefox má vlastní úložiště certifikátů, takže abyste jej mohli použít, musíte klientský certifikát importovat do „Vašich certifikátů“.
Mapování jeden na jednoho
Projdeme si také mapování jeden na jednoho. Tento přístup znamená, že pro každé mapování uživatele potřebujeme individuální klientský certifikát. Mapování many-to-one můžete buď zakázat a používat stejný certifikát a uživatele, nebo vytvořit nové. Vraťte se do Editoru konfigurace a znovu otevřete část iisClientCertificateMappingAuthentication. Klepněte na tlačítko … sekce oneToOneMappings.
Pro přidání mapování k certifikátu musíme exportovat veřejný klíč souboru s klientským certifikátem. Ten můžete exportovat z konzoly pro správu počítače (stiskněte tlačítko Windows a vyhledejte mmc) Přichytněte osobní úložiště certifikátu místního počítače a exportujte klientský ssl certifikát, který chcete použít, bez soukromého klíče ve formátu base64.
Klikněte pravým tlačítkem myši na nově exportovaný certifikát a otevřete jej pomocí Poznámkového bloku. V samotném certifikátu odstraňte všechny řádkové zlomy.
Teď to zkopírujte do pole vlastností certifikátu mapování a vyplňte zbytek
DŮLEŽITÉ: Aby to fungovalo, musíte zadat platné uživatelské jméno a heslo, a protože můj počítač je server, přihlašovací údaje budou uživatelské jméno a heslo systému Windows.
Znovu nezapomeňte změny použít.
A je to, vyzkoušejte to a po výzvě vyberte certifikát, který jste namapovali na právě namapovaného uživatele.
Doufám, že pro vás byl tento příspěvek užitečný a v dalším příspěvku se budu zabývat tím, jak používat vlastnoručně podepsané certifikáty společně s Windows Azure a jak konfigurovat IIS pomocí kódu C#, podívejte se na něj zde: 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/
Mějte se hezky =)