HTTPS v ASP.NET jádro od nuly

nedávno, když se podíváme na to, jak nakonfigurovat ověřování pomocí externích poskytovatelů přihlášení (např. Google, Facebook) s ASP.NET jádro všiml jsem si, že https je nyní pro některé z nich požadavkem.

další věc, kterou jsem si všiml, bylo, jak těžké bylo najít zdroje o povolení HTTPS na ASP.NET jádro.

tento blogový příspěvek je o procesu vytváření místního ASP.NET Core web běží s HTTPS bez chyb v prohlížeči Chrome (zobrazuje zelený visací zámek v adresním řádku) pro Váš místní vývojový čas. A pak, jak můžete použít Nginx nebo IIS, když jste připraveni je vystavit světu.

 HTTPS ASP.NET jádro

abychom mohli používat HTTPS, potřebujeme digitální certifikát. Pokud potřebujete vytvořit svůj vlastní použít v době vývoje doporučuji používat OpenSSL k vytvoření certifikátů. Vysvětluje nejen, jak si můžete vytvořit vlastní certifikační autoritu a certifikáty, ale také jak můžete nakonfigurovat prohlížeč (Chrome nebo Firefox) tak, aby důvěřoval certifikační autoritě.

pokud chcete pochopit, jaká je role certifikátů v HTTPS, podívejte se na stručné(ish) vysvětlení, jak https funguje.

od této chvíle předpokládám, že jste vygenerovali certifikační autoritu, certifikát a odpovídající soukromý klíč a máte .soubor pfx (Personal Information Exchange).

vytvořte nový projekt

budu popisovat proces pomocí kódu Visual Studio a Yeoman.

pokud nejste obeznámeni s yeoman, je to nástroj příkazového řádku, který vám umožní vytvářet nové projekty ze seznamu šablon projektů. Yeoman generator (to je Název balíčku pro yeoman, který obsahuje šablony), který budeme používat, je generator-aspnet. Chcete-li nainstalovat yeoman, musíte nejprve npm a pak můžete postupovat podle pokynů pro instalaci yeoman a ASP.NET základní šablony zde.

důvodem použití kódu Visual Studio a yeoman je to, že tento proces funguje na Windows, Linux a macOS.

Chcete-li použít yeoman s ASP.NET základní šablony spusťte následující příkaz:

$ yo aspnet _-----_ ╭──────────────────────────╮ | | │ Welcome to the │ |--(o)--| │ marvellous ASP.NET Core │`---------´ │ generator! │ ( _´U`_ ) ╰──────────────────────────╯ /___A___\ / | ~ | __'.___.'__ ´ ` |° ´ Y ` ? What type of application do you want to create? (Use arrow keys)❯ Empty Web Application Empty Web Application (F#) Console Application Console Application (F#) Web Application Web Application Basic Web Application Basic (F#) 

vyberte prázdnou webovou aplikaci. Bude vytvořen jednoduchý webový projekt, který má pouze stránku s textem „Hello World“.

pokud používáte systém Windows a máte plnou verzi Visual Studia, stačí udělat soubor – > nový projekt, vyberte. Net Core, ASP.NET jádro webové aplikace a poté vyberte Empty.

konfigurace HTTPS pro Poštolku

Poštolka je webový server, který je ve výchozím nastavení používán s ASP.NET jádro.

Chcete-li přidat podporu HTTPS do Kestrel, přidejte balíček Microsoft.AspNetCore.Server.Kestrel.Https jako závislost.

pokud používáte projekt.json můžete to udělat úpravou projektu.json sekce „závislosti“ a přidání:

"Microsoft.AspNetCore.Server.Kestrel.Https": "1.1.0"

Číslo verze se pro vás může lišit, mělo by však být stejné jako číslo použité v balíčku Microsoft.AspNetCore.Server.Kestrel.

pokud používáte .csproj můžete přidat závislost spuštěním:

dotnet add package Microsoft.AspNetCore.Server.Kestrel.Https

konfigurace certifikátu

Chcete-li nakonfigurovat Kestrel používat naše .soubor pfx (certifikát a soukromý klíč) musíme upravit Program.cs, kde se vytváří WebHostBuilder a provést několik změn:

var host = new WebHostBuilder() .UseConfiguration(config) .UseKestrel(options => { options.UseHttps("localhost.pfx", "password"); }) .UseContentRoot(Directory.GetCurrentDirectory()) .UseIISIntegration() .UseUrls("https://*:4430") .UseStartup<Startup>() .Build();

změny jsou:

.UseKestrel(options => { options.UseHttps("localhost.pfx", "password");})

což je místo, kde specifikujeme, co je .soubor pfx, který chceme použít, a jeho heslo. UseHttps je metoda rozšíření, pokud se zobrazí chyba, že neexistuje, je to proto, že jste nepřidali balíček Microsoft.AspNetCore.Server.Kestrel.Https nuget, kde žije.

také:

.UseUrls("https://*:4430")

který definuje, kde bude Poštolka odposlouchávat příchozí spojení. Případně můžete použít https://localhost:4430 místo *. S * však můžete použít libovolný název domény, například pokud máte tuto webovou aplikaci v myDomain.com, bude stále fungovat, zatímco s localhost budou doručeny pouze požadavky na localhost.

v případě, že se divíte, proč jsem nepoužil výchozí port HTTPS, 443, je to proto, že potřebujete speciální oprávnění pro Linux pro porty pod 1024. V systému Windows by to nebyl problém. Protože se to však s Poštolkou doporučuje pouze v době vývoje, není to velký problém.

pokud to zkoušíte v Linuxu, macOS nebo pomocí příkazového řádku v systému Windows, můžete zavolat dotnet run, otevřít Chrome a přejít na https://localhost:43000 a zobrazit zelenou ikonu visacího zámku.

pokud používáte full Visual Studio v systému Windows, způsob, jak to udělat, je určit, že chcete spustit webovou aplikaci přímo a ne prostřednictvím služby IIS Express:

vyberte aplikaci v možnostech spuštění

také vyberte prohlížeč, který chcete vyzkoušet. Pokud jste nainstalovali certifikát certifikační autority test root do konkrétního prohlížeče, použijte tento prohlížeč, například Chrome (pokud jste tímto Prohlášením zmateni, doporučujeme vám přečíst si stručné (ish) vysvětlení, jak https funguje, a pomocí OpenSSL k vytváření certifikátů):

vyberte Chrome jako prohlížeč a vyzkoušejte aplikaci na

nakonec upravte vlastnosti projektu (klikněte pravým tlačítkem myši a vyberte Vlastnosti):

klikněte pravým tlačítkem myši a vyberte Vlastnosti

a změňte adresu URL spuštění:

 změňte spouštěcí adresu URL

pomocí ASP.NET jádro s reverzním proxy

i když je jistě možné obsluhovat webovou aplikaci pomocí ASP.NET jádro používá pouze Poštolku, nedoporučuje se. Důvodem je, že Kestrel není plně vybavený webový server a stále chybí některé bezpečnostní funkce.

i když se to nedoporučuje, možná budete chtít ukázat něco, co jste někomu udělali, a přeskočit část instalace a konfigurace webového serveru. Se službami, jako je DigitalOcean nebo Linode, můžete vytvořit VPS ve velmi malém čase a mít jen své ASP.NET jádro je k dispozici pouze pro instalaci. Net core.

pokud však chcete něco vážnějšího (a pravděpodobně ano, protože jste zde kvůli povolení HTTPS), měli byste použít plně vybavený webový server, jako je Nginx nebo IIS (ve Windows), jako reverzní proxy k vašemu ASP.NET základní aplikace.

reverzní proxy server je webový server, který přijímá požadavky a odesílá je na jiný webový server, který skutečně vytváří odpovědi na tyto požadavky. Odpovědi jsou odesílány zpět na proxy server, který je předává klientům, kteří vydali odpovídající požadavky.

s Nginx působící jako reverzní proxy by to vypadalo nějak takto:

Browser <----> Nginx <----> Kestrel

dobrá věc na tomto nastavení je, že můžeme využít toho, že Nginx (nebo IIS) je úplným webovým serverem a povolí na něm HTTPS:

Browser <---- HTTPS ---> Nginx <---- HTTP ----> Kestrel

takže ani nemusíme konfigurovat Kestrel pomocí HTTPS, jen Nginx.

konfigurace HTTPS s Nginx

nejprve musíte nainstalovat Nginx. Používám k tomu Ubuntu 16.04, ale můžete jej dokonce nainstalovat na Windows.

pokud používáte Ubuntu, otevřete terminál a zadejte

$ sudo apt-get install nginx

další věc, kterou musíme udělat, je upravit konfiguraci Nginx. Ale než to uděláme, je užitečné vědět, jaké je umístění konfiguračních souborů a jak jsou povoleny. Složka, kde jsou konfigurační soubory obvykle umístěny, je /etc/nginx/sites-available/ (toto umístění se může lišit, pokud používáte jinou distribuci Linuxu).

konfigurační soubor, který je přítomen při instalaci Nginx, je pojmenován default.

aby byla konfigurace Nginx povolena, musí být umístěna ve složce /etc/nginx/sites-enabled. Takže po vytvoření nového konfiguračního souboru (v sites-available) je vytvořen symbolický odkaz v sites-enabled, který ukazuje na nový soubor.

Představte si, že jsme právě vytvořili nový konfigurační soubor s názvem my-site-https v sites-available. Poté přejdete do složky sites-enabled a spustíte následující příkaz k vytvoření symbolického odkazu:

$ ln -s /etc/nginx/sites-available/my-site-htts

Chcete-li, aby si Nginx přečetl tuto novou konfiguraci, spusťte příkaz:

$ sudo nginx -s reload

Nyní, když víme, jak vytvořit a povolit konfigurace Nginx, vytvoříme konfigurační soubor pro nastavení Nginx jako reverzní proxy na ASP.NET základní aplikace, která běží na http://localhost:5000.

nejprve vytvořte nový soubor v /etc/nginx/sites-available pojmenovaný například aspnetcore s následujícím obsahem:

server { listen 443 ssl; ssl_certificate PATH_TO_CERTIFICATE/CERTIFICATE_NAME.pem; ssl_certificate_key PATH_TO_PRIVATE_KEY/PRIVATE_KEY.pem; location / { proxy_pass http://localhost:5000; }}

zde konfigurujeme Nginx na listen na port 443 pomocí SSL (443 je výchozí pro HTTPS). Dále určujeme, kde se nachází certifikát (ssl_certificate) a soukromý klíč (ssl_certificate_key), a nakonec instruujeme Nginx, aby předal všechny požadavky (location / bude odpovídat všem požadavkům) na http://localhost:5000.

nakonec vytvořte symbolický odkaz na tento soubor v sites-enabled (odkaz na soubor default můžete smazat, původní soubor se tím neodstraní, protože se jedná o symbolický odkaz).

/etc/nginx/sites-enabled$ sudo ln -s /etc/nginx/sites-available/aspnetcore

Chcete-li Nginx načíst tuto konfiguraci:

$ sudo nginx -s reload

pokud máte svůj ASP.NET základní aplikace běžící na http://localhost:5000 nyní byste měli mít možnost Otevřít https://localhost a vidět, že se podává přes HTTPS.

při opětovném načtení konfigurace Nginx se může vyskytnout běžný problém, což je výzva k zadání hesla. Konkrétně pro heslo soukromého klíče. To pro vás nemusí být praktické, takže pokud chcete odstranit heslo ze soukromého klíče, můžete spustit následující příkaz:

$ openssl rsa -in privateKeyWithPassword.pem -out privateKeyWithoutPassword.pem

Další užitečnou věcí, kterou můžete s Nginx udělat, je přesměrování všech požadavků na HTTP na HTTPS. Pokud to chcete povolit, přidejte tuto další konfiguraci do konfiguračního souboru nginx aspnetcore :

server { listen 80; return 301 https://$host$request_uri;}

konfigurace supervizora

jedna věc, kterou se musíme zabývat, je, že musíme zachovat naše ASP.NET jádro webové aplikace běží.

existuje nástroj s názvem supervisor, který nám umožňuje nakonfigurovat, že aplikace by měla být spuštěna při spuštění, a pokud dojde k chybě, měla by být znovu spuštěna

první věc, kterou musíme udělat, je nainstalovat ji. Používám k tomu Ubuntu 16.04 a v této distribuci je instalace velmi jednoduchá:

$ sudo apt-get install supervisor

další věc, kterou musíme udělat, je vytvořit konfigurační soubor supervisor pro naši webovou aplikaci. Nazvěme to aspnetcore.conf a přidejte jej do /etc/supervisor/conf.d (musíte to udělat pomocí sudo):

umístěte to do konfiguračního souboru:

command=/usr/bin/dotnet PATH_TO_YOUR_PUBLISHED_PROJECT/YOURWEBAPP.dlldirectory=PATH_TO_YOUR_PUBLISHED_PROJECTautostart=trueautorestart=truestdout_logfile=/var/log/aspnetcore.out.logstderr_logfile=/var/log/aspnetcore.err.logenvironment=ASPNETCORE_ENVIRONMENT="Production"

první řádek definuje název (aspnetcore), kterým můžeme odkazovat na webovou aplikaci v supervisor.

řádek s command definuje příkaz ke spuštění. V tomto případě je to dotnet následuje dll vaší webové aplikace. To odpovídá spuštění dotnet run v kořenovém adresáři vašeho projektu.

následující řádek (directory=) nastaví pracovní adresář jako adresář, kde se nachází váš projekt.

autostart=true znamená, že aplikace bude spuštěna při spuštění.

autorestart=true znamená, že aplikace bude restartována, pokud dojde k chybě nebo dokonce pokud je zastavena (například pomocí kill). Pokud chcete, aby byla aplikace restartována pouze v případě havárie, změňte ji na autorestart=unexpected.

následující dva řádky definují, do kterých souborů se zapisuje standardní a chybový výstup.

nakonec environment nám umožňuje nastavit proměnné prostředí, v tomto případě nastavujeme ASPNETCORE_ENVIRONMENT=Production.

Chcete-li povolit tento nový konfigurační soubor, spusťte následující příkazy:

$ sudo supervisorctl reread$ sudo supervisorctl update

stav procesů běžících pod supervizorem můžete zkontrolovat spuštěním

$ sudo supervisorctl

mělo by se zobrazit něco podobného:

aspnetcore se systémem pid 18817, uptime 0: 05: 29
supervizor>

existuje více několik příkazů, které můžete použít ke správě procesů v supervizor, zadejte help pro seznam dostupných příkazů. Chcete-li ukončit, stačí zadat quit.

Konfigurace protokolu HTTPS pomocí služby IIS

prvním krokem k povolení protokolu HTTPS při používání služby IIS je instalace našeho certifikátu a soukromého klíče (pomocí a .soubor pfx, který obsahuje obojí).

otevřete Správce služby IIS a vyberte certifikáty serveru

 otevřete certifikáty serveru ve službě IIS

klikněte na importovat certifikát:

Import certifikát

vyberte .soubor pfx a zadejte odpovídající heslo, ponechte obchod jako osobní:

vyberte pfx a zadejte heslo

než budeme pokračovat, je důležité zmínit, že musíte mít ASP.NET jádro modul nainstalován. Je velmi pravděpodobné, že již děláte, protože je nainstalován pro vás při instalaci sady. Net Core SDK.

v případě, že tomu tak není (můžete jej ověřit ve Správci IIS otevřením modulů a zkontrolovat, zda je zde uveden AspNetCoreModule), najdete zde pokyny k instalaci a přímý odkaz pro stažení ASP.NET Core Server Hosting Bundle zde.

co tento modul dělá, je spustit ASP.NET jádro webové stránky a udržet ji v chodu (restartování, pokud dojde k chybě). Tento modul je také zodpovědný za předávání požadavků HTTP do vaší webové aplikace a poté přeposílání odpovědí zpět klientovi.

o AspNetCoreModule je důležité vědět, že je nakonfigurován souborem web.config v kořenovém adresáři vašeho projektu. Musíte spustit dotnet publish na projektu, aby si web.config nastavení správně ve složce publikovat.

dalším krokem je vytvoření nového fondu aplikací a výběr bez spravovaného kódu jako verze. Net CLR. Obvykle webové stránky běží uvnitř pracovního procesu IIS, ale v. NET Core běží jako samostatný proces, takže není potřeba. Net Runtime ve fondu aplikací:

 vytvořit nový fond aplikací

nakonec vytvoříme nový web uvnitř IIS pro naše ASP.NET základní aplikace. Musíme vybrat fond aplikací, který jsme právě vytvořili, vybrat jako fyzickou cestu cestu k publikovanému webu, vybrat HTTPS jako vazbu a náš certifikát v rozbalovací nabídce SSL certifikát:

vytvořit nový web

nyní byste měli být schopni používat https k procházení vašich webových stránek ASP.NET základní aplikace.

je spravedlivé sdílet… Sdílet na Facebook

Facebook

Tweet o tom na Twitter

Twitter

 Sdílet na LinkedIn

Linkedin

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.