Umístění CRL do Azure
V rámci jednoho z projektů nasazení PKI jsme nutně potřebovali vysoce dostupné umístění CDP (CRL Distribution Point) založené na HTTP protokolu. U zákazníka však v prostředí nebylo žádné vhodné existující vysoce dostupné řešení a stavět dva nové Windows Servery s rolí Web Server s použitím NLB jen pro umístění malého CRL souboru nám nedávalo úplně smysl. Nakonec nás napadlo zvážit umístění CRL do Azure. Protože jsme věděli, že navíc toto CDP bude využíváno velmi často i externími klienty, ukázalo se to jako velmi dobrá volba. Protože jsem tento scénář na Internetu nenašel nikde popsán, chtěl bych se tímto článkem s Vámi podělit o získanou zkušenost.
Volba vhodné Azure služby
Zvolili jsme službu Azure Web Apps, která umožňuje rychle sestavit, nasadit a spravovat weby a webové aplikace. Konkrétně plán D1 (tzv. Shared), který stojí přibližně 8 EUR za měsíc a umožňuje přidat vlastní doménu, což je pro umístění CRL nutné.
Obrázek 1 Srovnání plánů Azure Web Apps
Vytvoření webové aplikace
Po registraci do Azure portálu je potřeba vytvořit novou webovou aplikaci. Ta automaticky dostane přiřazený název ve tvaru název_aplikace. azurewebsites.net. V případě mého testovacího webu se jedná o jméno knotekcrl.azurewebsites.net. Pokud chceme používat pro přístup vlastní doménu, je nutné pro ověření do externí DNS přidat CNAME záznam, který prokazuje, že danou doménu můžeme administrovat. V mém případě se jednalo o záznam crl.knotek.net CNAME knotekcrl.azurewebsites.net. Poté co je záznam zpropagován do externích DNS serverů, je možné projít validačním mechanismem Azure.
Obrázek 2 Ověření názvu hostitele
Přístup pro nahrávání obsahu
Jedna z možností, jak nahrávat obsah do webové aplikace, je pomocí FTP. Správcovský účet pro správu Azure ale není z bezpečnostních důvodů možné použít i pro FTP přístup. Je tak nutné vytvořit dedikovaný účet přímo pro FTP přístup. Po jeho vytvoření se nám v sekci „Základní údaje“ objeví přehled všech podstatných přístupových údajů: přihlašovací jméno, URL pro FTP přístup, URL pro FTPS přístup atp.
Obrázek 3 Přístupové údaje pro FTP
Skript pro automatické nahrávání CRL souborů do Azure Web App
Protože CRL je vydáváno běžně 1x týdně a Delta CRL dokonce 1x denně, není možné soubory manuálně kopírovat do Azure Web App, ale je nutné zajistit automatický přenos nově vydaných CRL souborů. Zde jsme společně s kolegyní Olgou Annou Berkovskou zvolili cestu PoweShell skriptu, který je pravidelně spouštěn na certifikační autoritě jako naplánovaná úloha. Níže uvádíme základní kostru skriptu, kterou je možné pro tuto úlohu bez větších úprav použít v libovolném prostředí.
1: #Declare the folder
2: $Dir="C:\EnterpriseCA\CRL"
3: #ftp server
4: $ftpserver = "ftp://waws-prod-sn1-033.ftp.azurewebsites.windows.net/site/wwwroot/"
5: $user = "knotekcrl\MirekKnotek_FTP"
6: $pass = "MegaKrutoPrisneHeslo"
7: foreach($item in (Get-ChildItem $Dir -Filter "*.crl")){
8: "Uploading $item..."
9: #connect to ftp server
10: $ftp = [System.Net.FtpWebRequest]::Create($ftpserver+$item.Name)
11: $ftp = [System.Net.FtpWebRequest]$ftp
12: $ftp.Method = [System.Net.WebRequestMethods+Ftp]::UploadFile
13: $ftp.Credentials = new-object System.Net.NetworkCredential($user,$pass)
14: $ftp.UseBinary = $true
15: $ftp.EnableSsl = $true
16: #$ftp.UsePassive = $false
17: # read in the file to upload as a byte array
18: $content = [System.IO.File]::ReadAllBytes($item.FullName)
19: $ftp.ContentLength = $content.Length
20: # get the request stream, and write the bytes into it
21: $rs = $ftp.GetRequestStream()
22: $rs.Write($content, 0, $content.Length)
23: # be sure to clean up after ourselves
24: $rs.Close()
25: $rs.Dispose()
26: $ftp.Abort()
27: $ftp = $null
28: }
Problém s Delta CRL
Je obecně známý problém, že delta CRL soubor není s výchozím nastavením IIS dostupný pro stažení díky tomu, že název souboru obsahuje znak „+”. Pro jistotu jsem tedy vyzkoušel, zda stejné chování není i v Azure. A výsledek byl, že ani tady nebylo možné delta CRL stáhnout. Na IIS to má snadné řešení, zaškrtneme v nastavení Allow Double Escaping, a je vyřešeno. V Azure jsem ale žádné podobné nastavení nenašel. Nakonec se mi podařilo vše vyřešit vytvořením web.configu s následujícím obsahem
1: <?xml version="1.0" encoding="UTF-8"?>
2: <configuration>
3: <system.webServer>
4: <security>
5: <requestFiltering allowDoubleEscaping="true" />
6: </security>
7: </system.webServer>
8: </configuration>
Tento web.config je třeba nahrát do kořenu složky wwwroot, restartovat webovou aplikaci a zhruba 10 minut počkat. Po tomto nastavení je z Azure Web App bez problému dostupné i DeltaCRL.
Shrnutí
Azure není vhodný jen v situaci, kdy potřebujeme provozovat velké množství virtuálních strojů. Azure v dnešní době obsahuje velmi bohatou škálu různých služeb a vždy je na místě zvážit, zda neposkytuje vhodnější řešení daného problému. V tomto případě jsme si ověřili, že díky Azure je možné získat, velmi snadno a levně vysoce, dostupné CDP, což je z pohledu nasazení PKI velmi často kriticky důležité.
Miroslav Knotek, KPCS CZ, knotek@kpcs.cz
KPCS CZ, s.r.o. je přední českou firmou specializující se na nasazení, správu a podporu informačních technologií, primárně zaměřenou na produkty společnosti Microsoft. Jako systémový integrátor poskytuje kvalitní podniková řešení na této platformě, která jsou v pravidelných intervalech hodnocena prvními příčkami v soutěžích Microsoft Awards. KPCS CZ disponuje předními odborníky na problematiku veřejného cloudu, tedy služeb Office 365 a Azure, ale i technologií privátního cloudu Windows Server, Hyper-V a produktů rodiny System Center.