HTTPS în ASP.NET Core de la zero

recent, atunci când se uită la modul de configurare a autentificării folosind furnizori externi de conectare (de exemplu, Google, Facebook) cu ASP.NET Core am observat că https este acum o cerință pentru unele dintre ele.

un alt lucru pe care l-am observat a fost cât de greu a fost să găsesc resurse despre activarea HTTPS pe ASP.NET miezul.

această postare pe blog este despre procesul de creare a unui ASP local.Site-ul Net Core rulează cu HTTPS fără erori în Chrome (care arată lacătul verde în bara de adrese) pentru timpul de dezvoltare locală. Și apoi cum puteți utiliza Nginx sau IIS atunci când sunteți gata să-l expuneți lumii.

HTTPS ASP.NET CORE

pentru a utiliza HTTPS avem nevoie de un certificat digital. Dacă aveți nevoie pentru a genera propriul dvs. de a utiliza la momentul dezvoltării vă recomandăm să utilizați OpenSSL pentru a crea certificate. Nu numai că explică modul în care vă puteți crea propria autoritate de certificare și certificate, ci și modul în care vă puteți configura browserul (Chrome sau Firefox) pentru a avea încredere în Autoritatea de certificare.

de asemenea, dacă doriți să înțelegeți care este rolul certificatelor în HTTPS, atunci aruncați o privire la scurtă explicație(ish) a modului în care funcționează https.

de acum încolo presupun că ați generat Autoritatea de certificare, certificatul și cheia privată corespunzătoare și aveți un .pfx (schimbul de informații personale) fișier.

creați un nou proiect

voi descrie procesul folosind codul Visual Studio și Yeoman.

dacă nu sunteți familiarizat cu yeoman, este un instrument de linie de comandă care vă permite să creați proiecte noi dintr-o listă de șabloane de proiect. Generatorul yeoman (care este numele pachetului pentru yeoman care conține șabloanele) vom folosi este generator-aspnet. Pentru a instala yeoman aveți nevoie mai întâi de npm și apoi puteți urma instrucțiunile pentru instalarea yeoman și ASP.NET șabloane de bază aici.

motivul utilizării Visual Studio Code și yeoman este că acest proces funcționează pe Windows, Linux și macOS.

pentru a utiliza yeoman cu ASP.NET șabloanele de bază rulează următoarea comandă:

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

selectați Aplicație Web goală. Va fi creat un proiect web simplu, care are doar pagina cu textul „Hello World”.

dacă executați Windows și au versiunea completă a Visual Studio puteți face doar fișier – > proiect nou, selectați. Net Core, ASP.NET Core Web Application și apoi selectați gol.

Configurarea HTTPS pentru Kestrel

Kestrel este serverul web care este utilizat în mod implicit cu ASP.NET miezul.

pentru a adăuga suport HTTPS la Kestrel adăugați pachetul Microsoft.AspNetCore.Server.Kestrel.Https ca dependență.

dacă utilizați project.json puteți face acest lucru prin editarea proiectului.secțiunea „dependențe” a lui json și adăugarea:

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

Numărul versiunii poate fi diferit pentru dvs., însă ar trebui să fie același cu cel utilizat în pachetul Microsoft.AspNetCore.Server.Kestrel.

dacă utilizați .csproj puteți adăuga dependența rulând:

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

configurare certificat

pentru a configura Kestrel pentru a utiliza nostru .fișier pfx (certificat și cheie privată) trebuie să edităm Program.cs unde se creează WebHostBuilder și să facem câteva modificări:

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

modificările sunt:

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

care este în cazul în care vom specifica ceea ce este .fișier pfx pe care dorim să îl folosim și parola acestuia. UseHttps este o metodă de extensie, Dacă primiți o eroare spunând că nu există, este pentru că nu ați adăugat pachetul Microsoft.AspNetCore.Server.Kestrel.Https NuGet, care este locul în care trăiește.

de asemenea:

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

care definește unde va asculta Kestrel conexiunile primite. Alternativ, puteți utiliza https://localhost:4430în loc de *. Cu * cu toate acestea, puteți utiliza orice nume de domeniu, de exemplu, dacă aveți această aplicație web în myDomain.com ar funcționa în continuare, în timp ce cu localhost, numai cererile către localhost ar fi servite.

în cazul în care vă întrebați de ce nu am folosit portul HTTPS implicit, 443, asta pentru că aveți nevoie de permisiuni speciale pe Linux pentru porturile sub 1024. În Windows, aceasta nu ar fi o problemă. Cu toate acestea, deoarece acest lucru cu Kestrel este recomandat numai atunci când vă aflați la momentul dezvoltării, nu este o problemă mare.

dacă încercați acest lucru în Linux, macOS sau utilizați linia de comandă în Windows, puteți apela dotnet run, deschideți Chrome și accesați https://localhost:43000 și vedeți o pictogramă lacăt verde.

dacă utilizați full Visual Studio în Windows modul de a face acest lucru este să specificați că doriți să rulați aplicația web direct și nu prin IIS Express:

Selectați aplicația din opțiunile run

selectați și browserul pe care doriți să îl încercați. Dacă ați instalat certificatul autorității de certificare rădăcină de testare într-un anumit browser, utilizați browserul respectiv, de exemplu Chrome (dacă sunteți confuz de această declarație, vă recomandăm să citiți o scurtă explicație (ish) a modului în care funcționează https și utilizarea OpenSSL pentru a crea certificate):

selectați Chrome ca browser pentru a încerca aplicația pe

în cele din urmă, editați proprietățile proiectului(faceți clic dreapta și selectați Proprietăți):

faceți clic dreapta și selectați Proprietăți

și modificați url-ul de lansare:

schimbați adresa URL de lansare

folosind ASP.NET Core cu un proxy invers

deși este cu siguranță posibil să serviți o aplicație web folosind ASP.NET Core folosind numai Kestrel, nu este recomandat. Acest lucru se datorează faptului că Kestrel nu este un server web complet echipat și încă lipsește unele caracteristici de securitate.

chiar dacă nu este recomandat, este posibil să doriți doar să arătați ceva ce ați făcut cuiva și să săriți partea de instalare și configurare a unui server web. Cu servicii precum DigitalOcean sau Linode puteți crea un VPS în foarte puțin timp și aveți doar ASP.NET Core disponibil prin acolo doar pentru a instala. net core.

cu toate acestea, dacă doriți ceva mai serios (și probabil că faceți din moment ce sunteți aici din cauza activării HTTPS), ar trebui să utilizați un server web complet, cum ar fi Nginx sau IIS( în Windows), ca proxy invers pentru ASP.NET aplicație de bază.

un server proxy invers este un server web care acceptă cereri și le trimite la un alt server web care creează de fapt răspunsurile pentru aceste cereri. Răspunsurile sunt trimise înapoi la serverul proxy care le transmite clienților care au emis cererile corespunzătoare.

cu Nginx acționând ca un proxy invers, ar arăta cam așa:

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

lucrul bun despre această configurare este că putem profita de Nginx (sau IIS) fiind un server web complet și activăm HTTPS pe acesta:

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

deci nici nu trebuie să configurăm Kestrel cu HTTPS, ci doar Nginx.

Configurarea HTTPS cu Nginx

mai întâi trebuie să instalați Nginx. Folosesc Ubuntu 16.04 pentru asta, totuși îl puteți instala chiar și pe Windows.

dacă rulați Ubuntu deschideți un terminal și tastați

$ sudo apt-get install nginx

următorul lucru pe care trebuie să-l facem este să editați configurația Nginx. Dar înainte de a face acest lucru este util să știm care este locația fișierelor de configurare și cum devin activate. Folderul în care sunt plasate de obicei fișierele de configurare este /etc/nginx/sites-available/ (această locație poate fi diferită dacă utilizați o distribuție Linux diferită).

fișierul de configurare care este prezent atunci când instalați Nginx se numește default.

pentru ca o configurație Nginx să devină activată, aceasta trebuie localizată în folderul /etc/nginx/sites-enabled. Deci, după crearea unui nou fișier de configurare (în sites-available) se creează o legătură simbolică în sites-enabled care indică noul fișier.

Imaginați-vă că tocmai am creat un nou fișier de configurare numit my-site-https în sites-available. După aceea, mergeți la folderul sites-enabled și executați următoarea comandă pentru a crea o legătură simbolică:

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

pentru ca Nginx să citească această nouă configurație rulați comanda:

$ sudo nginx -s reload

acum, că știm cum să creăm și să activăm configurațiile Nginx, să creăm fișierul de configurare pentru configurarea Nginx ca proxy invers la un ASP.NET aplicație de bază care rulează la http://localhost:5000.

mai întâi creați un fișier nou în /etc/nginx/sites-available numit, de exemplu, aspnetcore, cu următorul conținut:

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

aici configurăm Nginx la listen la portul 443 folosind SSL (443 este implicit pentru HTTPS). În continuare specificăm unde se află certificatul (ssl_certificate) și cheia privată (ssl_certificate_key) și, în final, instruim Nginx să transmită toate cererile (location / se vor potrivi cu toate cererile) la http://localhost:5000.

în cele din urmă, creați linkul simbolic către acest fișier în sites-enabled (puteți șterge linkul către fișierul default, acesta nu va șterge fișierul original, deoarece este un link simbolic).

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

pentru ca Nginx să încarce această configurație:

$ sudo nginx -s reload

dacă aveți dumneavoastră ASP.NET aplicație de bază care rulează la http://localhost:5000 acum ar trebui să puteți deschide https://localhost și să o vedeți difuzată prin HTTPS.

există o problemă comună care se poate întâmpla atunci când reîncărcați configurația Nginx, care este vi se solicită o parolă. În special pentru Parola cheii private. Este posibil ca acest lucru să nu fie practic pentru dvs., deci dacă doriți să eliminați parola din cheia privată, puteți rula următoarea comandă:

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

un alt lucru util pe care îl puteți face cu Nginx este ca toate cererile de HTTP să fie redirecționate către HTTPS. Dacă doriți să activați această adăugați această configurație suplimentară pentru a vă aspnetcore Nginx fișier de configurare:

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

Configurarea supervizorului

un lucru de care trebuie să ne preocupăm este că trebuie să ne păstrăm ASP.NET Core aplicație web care rulează.

există un instrument numit supervizor care ne permite să configurăm că o aplicație ar trebui inițiată la momentul pornirii și, dacă se blochează, ar trebui să fie adusă înapoi

primul lucru pe care trebuie să-l facem este să o instalăm. Folosesc Ubuntu 16.04 pentru asta, iar în această distribuție instalarea este foarte simplă:

$ sudo apt-get install supervisor

următorul lucru pe care trebuie să-l facem este să creăm un fișier de configurare supervizor pentru aplicația noastră web. Să-l numim aspnetcore.conf și să-l adăugăm la /etc/supervisor/conf.d(trebuie să faceți acest lucru folosind sudo):

plasați acest lucru în fișierul de configurare:

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"

prima linie definește numele (aspnetcore) prin care ne putem referi la aplicația web din supervizor.

linia cu command definește comanda de executat. În acest caz, este dotnet urmat de dll-ul aplicației dvs. web. Acest lucru este echivalent cu rularea dotnet run în rădăcina proiectului.

următoarea linie (directory=) setează directorul de lucru ca cel în care se află proiectul dvs.

autostart=true înseamnă că aplicația va fi pornită la momentul pornirii.

autorestart=trueînseamnă că aplicația va fi repornită dacă se blochează sau chiar dacă este oprită (de exemplu, folosind kill). Dacă doriți ca aplicația dvs. să fie repornită numai în cazul unui accident, schimbați-o la autorestart=unexpected.

următoarele două linii definesc la ce fișiere sunt scrise ieșirea standard și respectiv eroarea.

în cele din urmă environmentne permite să setăm variabile de mediu, în acest caz setăm ASPNETCORE_ENVIRONMENT=Production.

pentru a activa acest nou fișier de configurare executați următoarele comenzi:

$ sudo supervisorctl reread$ sudo supervisorctl update

puteți verifica starea proceselor care rulează sub supervizor rulând

$ sudo supervisorctl

ar trebui să afișeze ceva similar cu:

aspnetcore care rulează pid 18817, uptime 0:05:29
supervizor>

există mai multe comenzi pe care le puteți utiliza pentru a gestiona procese sub supervizor, tastați help Pentru o listă a comenzilor disponibile. Pentru a renunța, trebuie doar să tastați quit.

Configurarea HTTPS cu IIS

primul pas în activarea HTTPS în timp ce utilizați IIS este să instalați certificatul și cheia privată (folosind un .fișier pfx care conține ambele).

deschideți IIS Manager și selectați Certificate Server

deschideți Certificate server în IIS

Faceți clic pe import certificat:

certificat de Import

selectați .fișierul pfx și introduceți parola corespunzătoare, părăsiți magazinul ca Personal:

selectați pfx și introduceți parola

înainte de a continua, este important să menționăm că trebuie să aveți ASP.NET modulul de bază instalat. Este foarte probabil să faceți deja, deoarece este instalat pentru dvs. atunci când instalați.net core SDK.

cu toate acestea, în cazul în care nu este (puteți verifica în IIS Manager prin deschiderea modulelor și verificați dacă AspNetCoreModule este listat acolo), puteți găsi instrucțiuni de instalare aici și un link direct pentru descărcarea ASP.NET Core Server Hosting Bundle aici.

ceea ce face acest modul este de a începe ASP.NET site-ul de bază și păstrați-l rulează (repornirea-l în cazul în care se blochează). Acest modul este, de asemenea, responsabil pentru redirecționarea cererilor HTTP către aplicația dvs. web și apoi redirecționarea răspunsurilor către client.

un lucru important de știut despre AspNetCoreModule este că este configurat de fișierul web.config din rădăcina proiectului dvs. Trebuie să rulați dotnet publish pe proiectul dvs. pentru a obține web.config configurarea corectă în folderul publicare.

următorul pas este să creați un nou Pool de aplicații și să selectați niciun cod gestionat ca versiune.net CLR. În mod normal, site-urile web rulează în interiorul unui proces IIS worker, dar în. Net Core rulează ca un proces separat, deci nu este nevoie de o execuție. net în piscina de aplicații:

 creați o nouă piscină de aplicații

în cele din urmă, să creăm un nou site web în interiorul IIS pentru ASP.NET aplicație de bază. Trebuie să selectăm piscina de aplicații pe care tocmai am creat-o, să selectăm ca cale fizică calea către site-ul web publicat, să selectăm HTTPS ca legare și certificatul nostru în meniul derulant certificat SSL:

creați un nou site web

acum ar trebui să puteți utiliza https pentru a naviga la ASP.NET Core app.

este corect să împărtășim…Share on Facebook

Facebook

 Tweet despre acest lucru pe Twitter

Twitter

 Share on LinkedIn

Linkedin

Lasă un răspuns

Adresa ta de email nu va fi publicată.