HTTPS in ASP.NET Core from Scratch

a közelmúltban, amikor megnéztük, hogyan kell konfigurálni a hitelesítést külső bejelentkezési szolgáltatókkal (például Google, Facebook) ASP.NET Core észrevettem, hogy a https most követelmény néhányuk számára.

egy másik dolog, amit észrevettem, hogy milyen nehéz volt forrásokat találni a HTTPS engedélyezéséről ASP.NET mag.

ez a blogbejegyzés a helyi ASP létrehozásának folyamatáról szól.NET Core honlap fut HTTPS hiba nélkül a Chrome (mutatja a zöld lakat a címsorban) a helyi fejlesztési idő. És akkor hogyan használhatja az Nginx – et vagy az IIS-t, amikor készen áll arra, hogy felfedje a világnak.

 HTTPS ASP.NET CORE

a HTTPS használatához digitális tanúsítványra van szükségünk. Ha létre kell hoznia a sajátját a fejlesztési időben történő felhasználáshoz, azt javaslom, hogy használja az OpenSSL-t a tanúsítványok létrehozásához. Ez nem csak azt magyarázza el, hogyan hozhat létre saját tanúsító hatóságot és tanúsítványokat, hanem azt is, hogy hogyan konfigurálhatja böngészőjét (Chrome vagy Firefox) a tanúsító hatóság megbízhatóságára.

ha meg szeretné érteni, hogy mi a tanúsítványok szerepe a HTTPS – ben, akkor nézze meg a https működésének rövid(ish) magyarázatát.

mostantól feltételezem, hogy létrehozta a tanúsító hatóságot, a tanúsítványt és a megfelelő privát kulcsot, és van egy .PFX (személyes információcsere) fájl.

új projekt létrehozása

a folyamatot a Visual Studio Code és a Yeoman segítségével írom le.

ha nem ismeri a yeoman-t, ez egy parancssori eszköz, amely lehetővé teszi új projektek létrehozását a projektsablonok listájából. A yeoman generator (Ez a Yeoman Csomag neve, amely tartalmazza a sablonokat), amelyet használni fogunk, a generator-aspnet. A yeoman telepítéséhez először npm-re van szüksége, majd kövesse a yeoman telepítésére vonatkozó utasításokat ASP.NET alapvető sablonok itt.

a Visual Studio Code és a yeoman használatának oka az, hogy ez a folyamat Windows, Linux és macOS rendszeren működik.

a yeoman használata a ASP.NET az Alapsablonok a következő parancsot futtatják:

$ 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#) 

válassza az üres webalkalmazás lehetőséget. Egy egyszerű webes projekt jön létre, amely csak a “Hello World”szöveggel rendelkezik.

Ha Windows rendszert futtat, és a Visual Studio teljes verziója van, akkor csak fájl -> új projekt, válassza a. Net Core lehetőséget, ASP.NET Core webalkalmazás, majd válassza az üres lehetőséget.

HTTPS beállítása a Kestrel számára

a Kestrel az a webszerver, amelyet alapértelmezés szerint a ASP.NET mag.

ha HTTPS támogatást szeretne hozzáadni a Kestrelhez, add hozzá a Microsoft.AspNetCore.Server.Kestrel.Https csomagot függőségként.

ha projektet használ.json ezt a projekt szerkesztésével teheti meg.a json “függőségek” szakasza és hozzáadása:

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

a verziószám eltérő lehet az Ön számára, azonban meg kell egyeznie a Microsoft.AspNetCore.Server.Kestrel csomagban használt verzióval.

ha .csproj – t használ, a függőséget a következő futtatással adhatja hozzá:

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

Tanúsítványkonfiguráció

a Kestrel konfigurálása a mi használatához .pfx fájl (tanúsítvány és privát kulcs) szerkesztenünk kell a Program.cs fájlt, ahol a WebHostBuilder létrehozásra kerül, és néhány változtatást kell végrehajtanunk:

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

a változások a következők:

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

ahol megadjuk, mi az .a használni kívánt pfx fájl és a jelszava. A UseHttps egy kiterjesztési módszer, ha hibát kap, mondván, hogy nem létezik, az azért van, mert nem adta hozzá a Microsoft.AspNetCore.Server.Kestrel.Https nuget csomagot, ahol él.

szintén:

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

amely meghatározza, hogy Kestrel hol fogja hallgatni a bejövő kapcsolatokat. Alternatív megoldásként használhatja a https://localhost:4430 értéket a * helyett. A * használatával azonban bármilyen domain nevet használhat, például ha ez a webalkalmazás myDomain.com – ben van, akkor is működik, míg localhost esetén csak a localhost – re vonatkozó kérések kerülnek kiszolgálásra.

abban az esetben, ha kíváncsi, hogy miért nem használtam az alapértelmezett HTTPS portot, 443, ez azért van, mert speciális engedélyekre van szüksége a Linuxon az 1024 alatti portokhoz. A Windows rendszerben ez nem jelent problémát. Mivel azonban ezt a Kestrellel csak akkor javasoljuk, ha fejlesztési időben van, ez nem jelent nagy problémát.

ha Linuxban, macOS-ban vagy Windows-ban a parancssor használatával próbálkozik, hívja a dotnet run – ot, nyissa meg a Chrome-ot, menjen a https://localhost:43000 – ra, és nézze meg a zöld lakat ikont.

ha teljes Visual Studio-t használ a Windows rendszerben, akkor ezt úgy teheti meg, hogy megadja, hogy a webalkalmazást közvetlenül, nem pedig az IIS Express-en keresztül szeretné futtatni:

válassza ki az alkalmazást a Futtatás opciókban

válassza ki azt a böngészőt is, amelyen ki szeretné próbálni. Ha a teszt gyökértanúsítvány-hatóság tanúsítványát egy adott böngészőbe telepítette, akkor használja azt a böngészőt, például a Chrome-ot (ha ez a kijelentés összezavarja) azt javaslom, hogy olvassa el a https működésének rövid(ish) magyarázatát, valamint az OpenSSL használatával hozzon létre tanúsítványokat):

válassza a Chrome böngészőt az alkalmazás kipróbálásához

végül szerkessze a projekt tulajdonságait(kattintson a jobb gombbal, majd válassza a Tulajdonságok lehetőséget):

kattintson a jobb gombbal, és válassza a tulajdonságok

lehetőséget, és módosítsa az indító url-t:

 módosítsa az indítási url-t

használatával ASP.NET Core fordított proxy

bár ez minden bizonnyal lehetséges, hogy szolgálja a webes alkalmazás segítségével ASP.NET Core használata csak Kestrel, nem ajánlott. Ez azért van, mert a Kestrel nem teljes funkcionalitású webszerver, és még mindig hiányzik néhány biztonsági funkció.

annak ellenére, hogy nem ajánlott, érdemes csak megmutatni valakinek, amit tett, és kihagyni a webszerver telepítésének és konfigurálásának részét. Az olyan szolgáltatásokkal, mint a DigitalOcean vagy a Linode, nagyon rövid idő alatt létrehozhat egy VPS-t ASP.NET a Core csak a.net core telepítéséhez érhető el.

Ha azonban valami komolyabbat szeretne (és valószínűleg azért, mert itt van a HTTPS engedélyezése miatt), akkor egy teljes funkcionalitású webszervert kell használnia, mint például az Nginx vagy az IIS (Windows rendszerben), fordított proxyként a ASP.NET Core alkalmazás.

a fordított proxykiszolgáló olyan webszerver, amely elfogadja a kéréseket, és elküldi azokat egy másik webszervernek, amely ténylegesen létrehozza a válaszokat ezekre a kérésekre. A válaszokat visszaküldik a proxy szervernek, aki továbbítja azokat a megfelelő kéréseket kibocsátó ügyfeleknek.

az Nginx fordított proxyként működve valahogy így nézne ki:

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

a jó dolog ebben a beállításban az, hogy kihasználhatjuk az Nginx (vagy IIS) teljes webszerver előnyeit, és engedélyezhetjük a HTTPS-t:

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

tehát nem is kell konfigurálnunk a Kestrelt HTTPS-vel, csak az Nginx-et.

a HTTPS konfigurálása az Nginx segítségével

először telepítenie kell az Nginx-et. Ehhez az Ubuntu 16.04-et használom, de akár Windows rendszerre is telepítheti.

ha Ubuntut futtat, nyisson meg egy terminált, és írja be a

$ sudo apt-get install nginx

parancsot a következő dolog, amit meg kell tennünk, hogy szerkesztjük az Nginx konfigurációját. De mielőtt ezt megtennénk, hasznos tudni, hogy mi a konfigurációs fájlok helye, és hogyan engedélyezik őket. A konfigurációs fájlok mappája általában /etc/nginx/sites-available/ (ez a hely eltérő lehet, ha más Linux disztribúciót használ).

az Nginx telepítésekor megjelenő konfigurációs fájl neve default.

az Nginx konfiguráció engedélyezéséhez a /etc/nginx/sites-enabled mappában kell lennie. Tehát egy új konfigurációs fájl létrehozása után (sites-available – ben) egy szimbolikus link jön létre sites-enabled – ben, amely az új fájlra mutat.

képzelje el, hogy éppen létrehoztunk egy új konfigurációs fájlt, amelynek neve my-site-httpsa sites-available – ben. Ezután menjen a sites-enabled mappába, és futtassa a következő parancsot egy szimbolikus hivatkozás létrehozásához:

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

ahhoz, hogy az Nginx elolvassa ezt az új konfigurációt, futtassa a parancsot:

$ sudo nginx -s reload

most, hogy tudjuk, hogyan kell létrehozni és engedélyezni az Nginx konfigurációkat, hozzuk létre a konfigurációs fájlt az Nginx fordított proxyként történő beállításához ASP.NET Core alkalmazás fut http://localhost:5000.

először hozzon létre egy új fájlt a /etc/nginx/sites-available – ben, például aspnetcore néven, a következő tartalommal:

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; }}

itt konfiguráljuk az Nginx-et listen – re a 443-as portra SSL használatával (a HTTPS alapértelmezett értéke a 443). Ezután megadjuk, hogy hol található a tanúsítvány (ssl_certificate) és a privát kulcs (ssl_certificate_key), végül utasítjuk az Nginx-et, hogy továbbítsa az összes kérést (location / minden kérésnek megfelel) a http://localhost:5000 – ra.

végül hozza létre a fájl szimbolikus linkjét a sites-enabled fájlban (törölheti a default fájl linkjét, ez nem törli az eredeti fájlt, mivel ez egy szimbolikus link).

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

ahhoz, hogy az Nginx betöltse ezt a konfigurációt:

$ sudo nginx -s reload

ha megvan a ASP.NET Core alkalmazás fut http://localhost:5000 most meg kell tudni nyitni https://localhost és látni, hogy szolgált HTTPS-en keresztül.

van egy gyakori probléma, hogy előfordulhat, ha újratölti a Nginx konfiguráció, amely akkor kap egy jelszót. Kifejezetten a privát kulcs jelszavát. Lehet, hogy ez nem praktikus az Ön számára, ezért ha el akarja távolítani a jelszót a privát kulcsból, futtathatja a következő parancsot:

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

egy másik hasznos dolog, amit az Nginx-szel tehet, az, hogy a HTTP-re vonatkozó összes kérést átirányítja a HTTPS-re. Ha engedélyezni szeretné ezt, adja hozzá ezt az extra konfigurációt aspnetcore Nginx konfigurációs fájl:

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

konfigurálása Supervisor

egy dolog, meg kell aggódnunk magunkat, hogy meg kell tartani a ASP.NET Core webes alkalmazás fut.

van egy supervisor nevű eszköz, amely lehetővé teszi számunkra, hogy beállítsuk, hogy egy alkalmazást indításkor kell elindítani, és ha összeomlik, akkor vissza kell hozni

az első dolog, amit meg kell tennünk, hogy telepítjük. Ubuntu 16.04-et használok erre, és ebben a disztribúcióban a telepítés nagyon egyszerű:

$ sudo apt-get install supervisor

a következő dolog, amit meg kell tennünk, hogy létrehozunk egy felügyeleti konfigurációs fájlt a webes alkalmazásunkhoz. Nevezzük aspnetcore.conf – nek és adjuk hozzá /etc/supervisor/conf.d – hez (ezt a sudo használatával kell megtenni):

helyezze ezt a konfigurációs fájlba:

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"

az első sor meghatározza azt a nevet (aspnetcore), amellyel hivatkozhatunk a webes alkalmazásra a supervisorban.

a command sor határozza meg a futtatandó parancsot. Ebben az esetben ez dotnet, amelyet a webes alkalmazás dll-je követ. Ez egyenértékű a dotnet run futtatásával a projekt gyökerében.

a következő sor (directory=) a munkakönyvtárat úgy állítja be, mint ahol a projekt található.

autostart=true azt jelenti, hogy az alkalmazás induláskor indul.

autorestart=trueazt jelenti, hogy az alkalmazás újraindul, ha összeomlik, vagy akkor is, ha leáll (például kill használatával). Ha azt szeretné, hogy az alkalmazás csak akkor indítható újra, ha összeomlik, változtassa meg autorestart=unexpectedértékre.

a következő két sor határozza meg, hogy mely fájlokba íródik a standard, illetve a hiba kimenet.

végül environmentlehetővé teszi a környezeti változók beállítását, ebben az esetben a ASPNETCORE_ENVIRONMENT=Production beállítást.

az új konfigurációs fájl engedélyezéséhez futtassa a következő parancsokat:

$ sudo supervisorctl reread$ sudo supervisorctl update

meg tudja nézni az állapotát a futó folyamatok supervisor futtatásával

$ sudo supervisorctl

meg kell jelennie valami hasonló:

aspnetcore futó pid 18817, üzemidő 0:05:29
supervisor>

vannak több parancsok segítségével kezelheti a folyamatok a supervisor alatt írja be a help parancsot az elérhető parancsok listájához. A kilépéshez írja be a quitparancsot.

a HTTPS konfigurálása az IIS segítségével

a HTTPS engedélyezésének első lépése az IIS használata során a tanúsítvány és a privát kulcs telepítése (a.PFX fájl, amely mindkettőt tartalmazza).

nyissa meg az IIS-kezelőt és válassza ki a kiszolgálói tanúsítványokat

 nyissa meg a kiszolgálói tanúsítványokat az IIS-ben

kattintson a tanúsítvány importálása elemre:

import tanúsítvány

válassza ki a .írja be a megfelelő jelszót, hagyja el a boltot Személyesként:

válassza a PFX lehetőséget, majd írja be a jelszót

mielőtt folytatnánk, fontos megemlíteni, hogy ASP.NET központi modul telepítve. Nagyon valószínű, hogy már megtette, mivel a.Net Core SDK telepítésekor telepítve van az Ön számára.

azonban abban az esetben, ha nem (ellenőrizheti az IIS kezelőben a modulok megnyitásával, és ellenőrizze, hogy az AspNetCoreModule szerepel-e ott), a telepítési utasításokat itt találja, valamint egy közvetlen linket a ASP.NET Core szerver Hosting csomag itt.

mi ez a modul nem az, hogy indítsa el a ASP.NET Core website és folyamatosan fut (újraindítása, ha összeomlik). Ez a modul felelős a HTTP-kérések továbbításáért a webalkalmazásba, majd a válaszok visszaküldéséért az ügyfélnek.

fontos tudnivaló az AspNetCoreModule-ról, hogy a projekt gyökerében található web.config fájl konfigurálja. A dotnet publish parancsot kell futtatnia a projekten, hogy a web.config beállítás megfelelően megjelenjen a közzétételi mappában.

a következő lépés egy új alkalmazáskészlet létrehozása, és a.net CLR verzióként a No Managed Code kiválasztása. A webhelyek általában egy IIS-dolgozói folyamaton belül futnak, de a. net Core-ban külön folyamatként futnak, így nincs szükség. Net futási időre az alkalmazáskészletben:

 új alkalmazáskészlet létrehozása

végül hozzunk létre egy új weboldalt az IIS-en belül ASP.NET Core alkalmazás. Ki kell választanunk az éppen létrehozott alkalmazáskészletet, fizikai útvonalként ki kell választanunk a közzétett webhely elérési útját, a HTTPS-t kell választanunk kötésként, a tanúsítványunkat pedig az SSL tanúsítvány legördülő menüben:

Új weboldal létrehozása

mostantól a https használatával böngészhet a ASP.NET Core alkalmazás.

csak igazságos megosztani…Megosztás a Facebookon

Facebook

 Tweet erről a Twitteren

Facebook

 Megosztás a LinkedIn-en

Linkedin

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.