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.
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:
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ů):
nakonec upravte vlastnosti projektu (klikněte pravým tlačítkem myši a vyberte Vlastnosti):
a změňte adresu URL spuštění:
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
klikněte na importovat certifikát:
vyberte .soubor pfx a zadejte odpovídající heslo, ponechte obchod jako osobní:
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í:
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:
nyní byste měli být schopni používat https k procházení vašich webových stránek ASP.NET základní aplikace.