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.
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 ș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):
în cele din urmă, editați proprietățile proiectului(faceți clic dreapta și selectați Proprietăți):
și modificați url-ul 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ă environment
ne 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
Faceți clic pe import certificat:
selectați .fișierul pfx și introduceți parola corespunzătoare, părăsiți magazinul ca Personal:
î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:
î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:
acum ar trebui să puteți utiliza https pentru a naviga la ASP.NET Core app.