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.
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 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égül szerkessze a projekt tulajdonságait(kattintson a jobb gombbal, majd válassza a Tulajdonságok lehetőséget):
lehetőséget, és módosítsa az indító 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-https
a 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=true
azt 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 environment
lehető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 quit
parancsot.
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
kattintson a tanúsítvány importálása elemre:
válassza ki a .írja be a megfelelő jelszót, hagyja el a boltot Személyesként:
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:
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:
mostantól a https használatával böngészhet a ASP.NET Core alkalmazás.